预准备语句中的bind_param()错误报告

时间:2019-06-26 07:47:27

标签: php mysqli prepared-statement

我要捕获此错误:

  

警告:mysqli_stmt :: bind_param():类型定义字符串中的元素数量与绑定变量的数量不匹配

解决方案是provided here,但是由于某种原因它没有捕获到错误。

$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 :(得分:0)

首先,您无法在这种情况下捕获到这样的警告。仅仅因为它在bind_param的行上引发,所以它发生在下面的检查条件之前。

因此,可能是您的困惑-这种情况可以正常使用,但为时已晚。

我建议使用一个简单的错误处理程序捕获所有错误。该问题不是特定于mysqli的,通常您想捕获所有警告和其他错误并统一处理。您可以在我的PHP error reporting文章中找到一个示例:

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查询时都编写这样的条件。