SQL выдает синтаксическую ошибку с подготовленными операторами «near’?,?,?,?) в строке 1

#php #mysql #sql #xampp

#php #mysql #sql #xampp

Вопрос:

Моя цель — отправить регистрационную информацию пользователя в базу данных XAMPP SQL. Данные поступают успешно, но программа выдает ошибку «У вас ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса для использования near ‘?,?,?,?)’ в строке 1»

Я искал ответ на эту конкретную проблему, но пока не нашел решения.

     $password = $_POST['pwd'];
    $email = $_POST['email'];
    $username = $_POST['uid'];
    $sql = "INSERT INTO users(idUsers, uidUsers, emailUsers, 
    pwdUsers) VALUES (?,?,?,?);";
    $idnum = "";
    $hashpwd = password_hash($password, PASSWORD_DEFAULT);
    $stmt = mysqli_stmt_init($conn);
    mysqli_stmt_prepare($stmt, $sql);
    mysqli_stmt_bind_param($stmt, "ssss",$idnum, $username, $email, 
    $hashpwd);
    mysqli_stmt_execute($stmt);
    if(!mysqli_query($conn, $sql)){

        die(mysqli_error($conn));
        exit();

    }

        else{
            echo("YAY");
    }
  

Журналы ошибок PHP и SQL ничего не показывают, и я проверил наличие ошибок во всем остальном коде, это единственная часть, которая выдает ошибки.
Кажется, есть много сообщений на эту тему. Я просмотрел многие из них и не могу найти эту проблему.

Будем признательны за любую помощь!

Комментарии:

1. Вы связываете 6 значений, но оператор ожидает 4 значения

2. Должен ли быть последний ; внутри "INSERT INTO users(idUsers, uidUsers, emailUsers, pwdUsers) VALUES (?,?,?,?);" ?

3. @MsuArven, если я ясно вижу, привязаны только 4 значения

4. @T.Mas Я не видел, чтобы это имело значение, но я удалил это, чтобы быть уверенным.

Ответ №1:

Вы уже выполнили свой запрос с вызовом на mysqli_stmt_execute($stmt) ; вызов на mysqli_query завершается неудачно, потому что эта функция предназначена для выполнения обычных (не подготовленных) запросов, поэтому ? in $sql не заменяются. Вместо этого вы должны проверять статус возврата вызова mysqli_stmt_execute:

 if(!mysqli_stmt_execute($stmt)){
    die(mysqli_error($conn));
    exit();
}
else{
    echo("YAY");
}