php - 从 mysqli bind_param 捕获警告信息

标签 php mysql mysqli prepared-statement

如果您使用错误数量的参数执行 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->errormysqli_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/

相关文章:

php - 如何以正确的顺序列出父类别和子类别数据

php - mysql JSON_EXTRACT - 不返回任何结果

php - 如何加入多个查询

php爆炸关联数组问题

javascript - 谷歌图表 mysql PHP

php - 计算 PHP PCRE RegEx 中的子模式

php - 我如何使用 php 回显从文本框表单发布的变量?

php - 在 php 中制作 slider /选择获取数据

php - 尝试将数据从 sql 插入到 cookies

PHP 将 string 转换为 int 似乎给了我 0