Возможный дубликат:
mysql_fetch_array () ожидает, что параметр 1 будет ресурсом, boolean задан в select
Я знаю, что этот код работает на другом сайте, который у меня есть, но сегодня он не играет в мяч. Я получаю три предупреждения:
Предупреждение: mysqli_stmt_bind_param () ожидает, что параметр 1 будет mysqli_stmt, boolean указан в /homepages/14/d248783986/htdocs/subdomains/clients.bionic-comms.co.uk/httpdocs/carefree/process.php в строке 33
Предупреждение: mysqli_execute () ожидает, что параметр 1 будет mysqli_stmt, boolean указан в /homepages/14/d248783986/htdocs/subdomains/clients.bionic-comms.co.uk/httpdocs/carefree/process.php в строке 34
Предупреждение: mysqli_stmt_affected_rows () ожидает, что параметр 1 будет mysqli_stmt, boolean указан в /homepages/14/d248783986/htdocs/subdomains/clients.bionic-comms.co.uk/httpdocs/carefree/process.php в строке 35
Может кто-нибудь помочь мне понять это?
Мне нужно использовать htaccess для обновления до PHP5, если это поможет.
$connection = mysqli_connect($hostname, $username, $password, $dbname); if (!$connection) { die('Connect Error: ' . mysqli_connect_error()); } $query = "INSERT INTO entries (name, dob, school, postcode, date) VALUES (?,?,?,?,?)"; $stmt1 = mysqli_prepare($connection, $query); mysqli_stmt_bind_param($stmt1, 'sssss',$name,$dob,$school,$postcode,$date); mysqli_execute($stmt1); if(mysqli_stmt_affected_rows($stmt1) != 1) die("issues"); mysqli_stmt_close($stmt1); return "new";
РЕДАКТИРОВАТЬ
После некоторого исследования выясняется, что оператор подготовки не играет в мяч с mysql4. Я создал новую базу данных mysql5, но теперь я получаю эту ошибку при попытке подключения:
Предупреждение: mysqli_connect () [function.mysqli-connect]: (HY000 / 2005): Неизвестный сервер MySQL-сервера «localhost: /tmp/mysql5.sock» (1)
Кто-нибудь знает, почему это происходит?
Добавьте больше обработки ошибок.
Когда соединение выходит из строя, mysqli_connect_error () может рассказать вам более подробную информацию.
При подготовке утверждения не получается mysqli_error () имеет больше информации об ошибке.
Когда выполнение инструкции не выполняется, задайте mysqli_stmt_error () . И так далее и дальше …
Каждый раз, когда функция / метод модуля mysqli возвращает false для указания ошибки, a) обрабатывает эту ошибку и b) решает, имеет ли смысл смысл или нет. Например, нет смысла продолжать работу с базой данных при сбое соединения. Но имеет смысл продолжать вставлять данные, когда одна вставка не удалась (может иметь смысл, может и нет).
Для тестирования вы можете использовать что-то вроде этого:
$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) ); } ...
Для реальной производственной среды этот подход позволяет говорить и умереть легко 😉
Проблема возникает из mysqli_prepare()
, которая в вашем случае возвращает false
, следовательно, имеет значение «boolean given». Поскольку ваш запрос выглядит нормально, ошибка должна быть в $connection
. Вы уверены, что соединение работает и определено?
Соединение должно быть определено как нечто подобное:
$connection = mysqli_connect("localhost", "my_user", "my_password", "world");
Если соединение определено правильно, вы можете использовать echo mysqli_connect_error()
чтобы убедиться, что что-то пошло не так. Вы сказали, что код работает на другом сайте, поэтому, возможно, вы забыли изменить учетные данные или хост?