Związałeś tylko cztery argumenty ciągiem kontrolnym „sssd”, ale masz wiele parametrów. Podczas wiązania zmiennych z mysqli, potrzebujesz jednego znaku dla każdego parametru, na przykład:
mysqli_stmt_bind_param($stmt, "sssdsssssssssdd", $firstname, $surname, $address,
$gender, $city, $province, $postalcode, $phone, $secondphone, $email,
$organization, $inriding, $ethnicity, $senior, $student);
(Zakładam, że senior i student są liczbami całkowitymi i potrzebuję kodu „d”).
Nie musisz traktować żadnej ze swoich zmiennych za pomocą mysqli_real_escape_string() -- to jest sens używania parametrów. Jeśli wykonasz również ucieczkę, otrzymasz dosłowne znaki ukośnika odwrotnego w swoich danych w bazie danych.
I nigdy nie musisz używać htmlspecialchars() w żadnym przypadku - użyjesz tego podczas wysyłania do HTML, a nie podczas wstawiania do bazy danych. Otrzymasz sekwencje dosłowne, takie jak &
w Twoich danych w bazie danych.
Powróć do następnego błędu:
Jest to spowodowane przez:
$result = mysqli_query($mysqli,$stmt);
Ta funkcja oczekuje, że drugi argument będzie ciągiem, nowym zapytaniem SQL. Ale już przygotowałeś to zapytanie, więc potrzebujesz następujących informacji:
$result = mysqli_stmt_execute($stmt);