Mysqli бросает “Предупреждение: mysqli_stmt_bind_param () ожидает, что параметр 1 будет mysqli_stmt, булевская переменная, данная”, [копируют]

6
задан Community 23 May 2017 в 12:24
поделиться

2 ответа

Проблема исходит из mysqli_prepare(), которая в вашем случае возвращает false, отсюда и ошибка 'boolean given'. Так как Ваш запрос кажется нормальным, ошибка должна быть в $connection. Вы уверены, что соединение работает и определено?

Соединение должно быть определено как нечто подобное:

$connection = mysqli_connect("localhost", "my_user", "my_password", "world");

Если соединение правильно определено, вы можете использовать echo mysqli_connect_error(), чтобы посмотреть, не пошло ли что-нибудь не так. Вы сказали, что код работает на другом сайте, так что, возможно, вы забыли изменить учетные данные или хост?

.
3
ответ дан 9 December 2019 в 20:43
поделиться

Добавьте больше обработки ошибок.
В случае сбоя соединения, mysqli_connect_error() может рассказать вам больше подробностей.
При подготовке оператора fail mysqli_error() имеет больше информации об ошибке.
При неудачном выполнении оператора спросите mysqli_stmt_error(). И так далее и так далее...
Всякий раз, когда функция/метод модуля mysqli возвращает false, чтобы указать на ошибку, а) обрабатывает эту ошибку и б) решает, имеет ли смысл продолжать или нет. Например, нет смысла продолжать работу с БД, когда соединение не удалось. Но может иметь смысл продолжать вставку данных, когда только одна вставка не удалась (может иметь смысл, а может и нет).

Для тестирования можно использовать нечто подобное:

$connection = mysqli_connect(...);
if ( !$connection ) {
  die( 'connect error: '.mysqli_connect_error() );
}

$query = "INSERT INTO entries (name, dob, school, postcode, date) VALUES (?,?,?,?,?)";
$stmt1 = mysqli_prepare($connection, $query);
if ( !$stmt1 ) {
  die('mysqli error: '.mysqli_error($connection);
}
mysqli_stmt_bind_param($stmt1, 'sssss',$name,$dob,$school,$postcode,$date);
if ( !mysqli_execute($stmt1) ) {
  die( 'stmt error: '.mysqli_stmt_error($stmt1) );
}
...

Для реальной производственной среды такой подход является разговорчивым и легко умирает ;-)

.
9
ответ дан 9 December 2019 в 20:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: