如果您使用错误数量的参数执行 mysqli_stmt->bind_params(...)
,您会在浏览器中收到以下警告:
Warning: mysqli_stmt::bind_param() [mysqli-stmt.bind-param]:
Number of variables doesn't match number of parameters in prepared statement in ...
解决编码问题很容易,但我发现自己捕获该警告以控制它的显示方式并不容易(将来我可能会引发更多警告)。我想:
- 禁止自动显示警告
- 捕获警告消息并按照我自己的方式显示
简单地调用 @mysqli_stmt->bind_params(...)
似乎可以抑制显示的默认警告消息。这是最好的方法吗?
我似乎从 mysqli
获得的唯一信息是对 mysqli_stmt->bind_params
的调用返回 FALSE
。然而,也许因为这是一个警告,mysqli->error
或 mysqli_stmt->error
中没有数据。因此,我不清楚在哪里可以找到该消息的文本。有什么想法吗?
谢谢。
最佳答案
只要您有 PHP 5.3+,您要查找的方法就是 error_get_last
- PHP docs .这是一个简单的例子:
$success = @$mysqli_stmt->bind_params(...)
if ( !$success ) {
$einfo = error_get_last();
$an_output_str = "Error of type (".$einfo['type']."): ".$einfo['message'];
// $einfo['file'] and $einfo['line'] are also filled with useful info
}
编辑:
正如下面另一位先生所建议的那样,展望 future ,考虑一种更通用的警告/错误解决方案可能是明智的,这些警告/错误无法通过返回值和/或易于阅读的错误值设置来干净地处理.在这种情况下,您可能想要探索 set_error_handler
,它在 PHP 4.01 中一直受到支持 - PHP Docs .
最基本的实现可能看起来像这样(模仿我之前写的):
function deal_with_error($errno,$errstr,$errfile,$errline) {
$an_output_str = "Error of type (".$errno."): ".$errstr;
// $errfile, $errline also have useful info
}
set_error_handler("deal_with_error");
关于$errno
的不同取值,看看here .例如,您收到的警告的 $errno
为 2。
关于php - 从 mysqli bind_param 捕获警告信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18409051/