Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Nenhum dado fornecido para parâmetros na instrução preparada


Você vinculou apenas quatro argumentos, pela string de controle "sssd", mas tem muitos parâmetros. Ao vincular variáveis ​​com mysqli, você precisa de um caractere para cada parâmetro, por exemplo:
mysqli_stmt_bind_param($stmt, "sssdsssssssssdd", $firstname, $surname, $address, 
    $gender, $city, $province, $postalcode, $phone, $secondphone, $email, 
    $organization, $inriding, $ethnicity, $senior, $student);

(Estou assumindo que senior e student são números inteiros e precisam do código "d".)

Você não precisa tratar nenhuma de suas variáveis ​​com mysqli_real_escape_string() -- esse é o ponto de usar parâmetros. Se você também fizer o escape, obterá caracteres literais de barra invertida em seus dados no banco de dados.

E você nunca precisa usar htmlspecialchars() em qualquer caso - você usaria isso ao enviar para HTML, não ao inserir no banco de dados. Você obterá sequências literais como & em seus dados no banco de dados.

Re seu próximo erro:

Isso é causado pelo seguinte:
$result = mysqli_query($mysqli,$stmt);

Essa função espera que o segundo argumento seja uma string, uma nova consulta SQL. Mas você já preparou essa consulta, então você precisa do seguinte:
$result = mysqli_stmt_execute($stmt);