Сообщение об ошибке «объект mysqli_stmt не полностью инициализирован»

Я пытаюсь создать форму регистрации, используя php и sql, но продолжаю получать сообщение об ошибке «объект mysqli_stmt не полностью инициализирован». Файл Registration.php:

$sql = "INSERT INTO user_table ('user_name', 'user_email', 'user_password') VALUES (?, ?, ?)";
$stmt = mysqli_stmt_init($conn);
if (mysqli_stmt_prepare($stmt, $sql)){
    header("location: ../signup.php?error=sqlerror");
    exit();
} else {
    //hashing password
    $hashedPass = password_hash($password, PASSWORD_DEFAULT);
    //inserting hashed password.
    mysqli_stmt_bind_param($stmt, "sss", $username, $email, $hashedPass);
    mysqli_stmt_execute($stmt);
    
    header("location: ../signup.php?success=registered");
    exit();
}

Думаю, проблема в этой части (в строке №8).

Простая опечатка: вы использовали одинарные кавычки ' для обертывания идентификаторов, а не обратную кавычку `идентификационная цитата в вашем запросе, из-за чего mysqli_stmt_prepare возвращает false. Его нужно переписать как INSERT INTO user_table (`user_name`, `user_email`, `user_password`) ...

Will B. 30.03.2021 03:50

Вам также потребуется исправить логическую ошибку, позвонив в if (!mysqli_stmt_prepare($stmt, $sql)).

Will B. 30.03.2021 03:59
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
2
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если мы удалим вашу проверку if / else и запустим все, с mysqli_stmt_prepare после mysqli_stmt_init мы получим то, что ожидаем.

$stmt = mysqli_stmt_init($conn);
mysqli_stmt_prepare($stmt, $sql);

Таким образом, логика вашего if кажется, что ей нужен! (имеется в виду ложь). Попробуйте это изменить в своем блоке кода:

$sql = 'INSERT INTO user_table (user_name, user_email, user_password) VALUES (?, ?, ?)';
$stmt = mysqli_stmt_init($conn);

if (!mysqli_stmt_prepare($stmt, $sql)) {
    header("location: ../signup.php?error=sqlerror");
    exit();
} else {
    //hashing password
    $hashedPass = password_hash($password, PASSWORD_DEFAULT);

    //inserting hashed password.
    mysqli_stmt_bind_param($stmt, 'sss', $username, $email, $hashedPass);
    mysqli_stmt_execute($stmt);

    header("location: ../signup.php?success=registered");
    exit();
}

Приведенный выше код работал в моем тесте.

Вы можете заключить оператор if вокруг вызова функции без использования переменной. Таким образом, вы можете выполнить if (!mysqli_stmt_prepare()) { ... } для ожидаемых результатов с исправлением логики. Другим решением в вашем ответе было удаление одинарных кавычек ' вокруг идентификаторов имен столбцов, из-за чего mysqli_stmt_prepare() возвращал false в запросе OP, попадая в mysqli_stmt_bind_param(), и выдавал сообщение об ошибке из-за неверной логики.

Will B. 30.03.2021 03:55

@WillB. Спасибо. Обновлено, чтобы уточнить. Отметим, что кавычки не имеют значения в именах столбцов (работают с ними или без них, хотя моему csfixer они не понравились). Добавлена ​​подготовка к if, но я изначально хотел, чтобы она была более явной, когда OP прочитает код.

Jesse 30.03.2021 04:04

Да, OP использовал одинарные кавычки ' вокруг имен столбцов вместо обратных кавычек `. Рекомендуется использовать обратные кавычки для идентификаторов, когда это необходимо для зарезервированные ключевые слова, таких как user, password, date, name и т. д., Чтобы избежать потенциальных проблем, но это не всегда необходимо. С префиксом user_ они не нужны.

Will B. 30.03.2021 04:19

Другие вопросы по теме