Несоответствие количества переменных привязки при вставке подготовленного оператора
При выполнении оператора INSERT с использованием подготовленных операторов MySQLi пользователи могут столкнуться с ошибкой: " Количество переменных привязки не соответствует количеству полей в подготовленном операторе». . Например, рассмотрим приведенный ниже фрагмент кода:
if($stmt = $conn->prepare("INSERT INTO login(user, pass) VALUES(?, ?)")) { /* Параметры привязки s - строка, b - blob, i - int и т. д. */ $stmt->bind_param("ss", $user, $pw); /* Выполняем это */ $stmt->выполнить(); /* Привязка результатов */ $stmt->bind_result($user, $pw); /* Закрытие оператора */ $stmt->закрыть(); $userId = $conn->insert_id; }
if($stmt = $conn->prepare("INSERT INTO login(user, pass) VALUES(?, ?)")) { /* Bind parameters s - string, b - blob, i - int, etc */ $stmt->bind_param("ss", $user, $pw); /* Execute it */ $stmt->execute(); /* Bind results */ $stmt->bind_result($user, $pw); /* Close statement */ $stmt->close(); $userId = $conn->insert_id; }
Решение состоит в том, чтобы удалить вызов методаbind_result(), поскольку оператор INSERT не возвращает никаких результатов. Обновленный код ниже корректно вставляет данные в таблицу:
if($stmt = $conn->prepare("INSERT INTO login(user, pass) VALUES(?, ?)")) { /* Параметры привязки s - строка, b - blob, i - int и т. д. */ $stmt->bind_param("ss", $user, $pw); /* Выполняем это */ $stmt->выполнить(); /* Закрытие оператора */ $stmt->закрыть(); $userId = $conn->insert_id; }
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3