如果您使用不正确数量的参数执行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
中没有数据。因此,我不清楚在哪里可以找到该消息的文本。有什么想法吗?
感谢。
答案 0 :(得分:0)
虽然你的意图是对的,但措辞严厉(会带来一些错误的答案),而且 - 严格来说 - 与mysqli错误无关,而是与一般的所有PHP错误无关。
有办法做到这一点
禁止自动显示警告
这个很简单。
display_errors = 0
php.ini
中的将关闭所有PHP错误。
抓住警告信息并按照我自己的条件显示
您实际上不需要以自己的方式显示此特定错误,而是显示一般化的500错误页面。有很多方法可以做到这一点。最简单的方法之一是定义一个custom error handler,它将拦截所有错误并显示您想要的任何文本。只是不要忘记两件重要的事情:
但是,更好的方法是使HTTP服务器为这样的页面提供服务。它甚至可以解析错误处理错误。
答案 1 :(得分:0)
只要您拥有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
}
修改强>
正如另一位绅士在下面所建议的那样,在展望未来时,考虑对通过返回值和/或易于读取的错误值设置无法彻底处理的警告/错误的更一般的解决方案可能是明智的。 。在这种情况下,您可能想要探索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。