Ошибка, сгенерированная MySQL, не должна останавливать выполнение. Фактически, вы можете сделать так, чтобы ваш скрипт показывал вам любые ошибки SQL, используя $mysqli->error
(при условии, что $mysqli
- это подключение к вашей базе данных, как в вашем примере). Однако может случиться так, что ваша ошибка mysqli приводит к тому, что определенный объект не будет создан, а затем вызов метода для этого объекта приведет к фатальной ошибке PHP. Например:
$dbconn = new mysqli("localhost", $username, $password, $dbname);
$stmt = $dbconn->prepare("bluh"); // not a valid statement. fails to create a mysqli statement object in $stmt.
echo($dbconn->error); // your script is still running, and this will show your MySQL syntax error.
$stmt->execute();
Это умрет не потому, что вы допустили ошибку SQL, а потому, что $stmt
был нулевым и не имел ожидаемого execute()
метода. Поэтому, как и все остальные, проверьте ваши логи и посмотрите, что является настоящей ошибкой
Использование @
для игнорирования ошибок будет происходить по ошибке, пока вы не выясните, какая именно команда создает ошибку.
update: Если вы знаете, что ошибка в запросе, то вы можете проверить, успешно ли выполнен запрос, прежде чем пытаться что-либо с ним сделать. Один из способов - проверить параметр error
; другой - проверить, действительно ли он вернул тот тип объекта, который вам нужен.
Вот примеры обоих:
$result = $db->query("select firstname, lastname from people where firstname = 'egbert';");
if($db->error == '') {
// the query worked, so fetch results from $result and do stuff with them.
}
else {
// the query didn't work, so don't try to do anything with $result
}
// alternately:
if(gettype($result) == "object") {
// the query worked.
}
else {
// it didn't.
}