Проблема исходит из mysqli_prepare()
, которая в вашем случае возвращает false
, отсюда и ошибка 'boolean given'. Так как Ваш запрос кажется нормальным, ошибка должна быть в $connection
. Вы уверены, что соединение работает и определено?
Соединение должно быть определено как нечто подобное:
$connection = mysqli_connect("localhost", "my_user", "my_password", "world");
Если соединение правильно определено, вы можете использовать echo mysqli_connect_error()
, чтобы посмотреть, не пошло ли что-нибудь не так. Вы сказали, что код работает на другом сайте, так что, возможно, вы забыли изменить учетные данные или хост?
Добавьте больше обработки ошибок.
В случае сбоя соединения, 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) );
}
...
Для реальной производственной среды такой подход является разговорчивым и легко умирает ;-)
.