сообщение об ошибке для bind_param () в подготовленных выражениях - PullRequest
0 голосов
/ 26 июня 2019

Я хочу уловить эту ошибку:

Предупреждение: mysqli_stmt :: bind_param (): количество элементов в строке определения типа не соответствует числу переменных связывания

Решение было предоставлено здесь , но по какой-то причине оно не улавливает ошибку.

$rc = $stmt->bind_param('iii', $x, $y, $z);
// bind_param() can fail because the number of parameter doesn't match the placeholders in the statement
// or there's a type conflict(?), or ....
if ( false===$rc ) {
  // again execute() is useless if you can't bind the parameters. Bail out somehow.
  die('bind_param() failed: ' . htmlspecialchars($stmt->error));
}

$rc возвращает 1, даже если количество параметров связывания не соответствует ...

1 Ответ

0 голосов
/ 26 июня 2019

Прежде всего, вы не можете поймать такое предупреждение с таким условием.Просто потому, что оно поднято в строке с bind_param, следовательно, это происходит до проверки состояния ниже.

Следовательно, возможно, ваше замешательство - состояние работает хорошо, но уже слишком поздно.

Я бы предложил отлавливать все ошибки с помощью простого обработчика ошибок.проблема не является специфической для mysqli, обычно вы хотите перехватывать все предупреждения и другие ошибки и обрабатывать их единообразно.Вы можете найти пример в моей статье о сообщениях об ошибках PHP :

set_error_handler("myErrorHandler");
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
    error_log("$errstr in $errfile:$errline");
    header('HTTP/1.1 500 Internal Server Error', TRUE, 500);
    readfile("500.html");
    exit;
}

Это будет делать именно то, что вы хотели в вашем состоянии, но без необходимости писать такое условие каждый раз, когда выготовим SQL-запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...