You*_*nse 6 php mysql mysqli exception
mysqli中有一个函数,被称为mysqli_report(),它看起来像PDO的setAttribute()方法及其ERRMODE_*常量的对应物.手册说:
MYSQLI_REPORT_STRICT
Throw mysqli_sql_exception for errors instead of warnings
所以,PDO::ERRMODE_EXCEPTION考虑到,我尝试了这段代码
mysqli_report(MYSQLI_REPORT_STRICT);
$mysqli->query("foo");
Run Code Online (Sandbox Code Playgroud)
但是,令我失望的是,它没有产生任何例外或警告.
所以,这里有一个问题:有没有办法告诉mysqli在不使用的情况下抛出异常MYSQLI_REPORT_ALL?
You*_*nse 14
经过一些研究,我终于知道函数的参数是一个位掩码,并且必须组合几个值才能得到所需的结果.最终组合不是过于合乎逻辑,但它按预期工作,在忽略警告时抛出查询错误的异常.
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
Run Code Online (Sandbox Code Playgroud)
将产生预期的结果:
致命错误:未捕获异常'mysqli_sql_exception',消息'您的SQL语法有错误; 查看与您的MySQL服务器版本对应的手册,以便在第1行'foo'附近使用正确的语法
Mic*_*eau 10
这不是一个错误,这是一个功能.;)
默认情况下,PHP不会报告mysqli或PDO错误,因为该信息非常敏感,将其显示给用户是学习如何注入恶意数据的好方法.
MYSQLI_REPORT_ERROR告诉它打开错误,MYSQLI_REPORT_STRICT告诉它将这些错误转换为异常.这将为您提供错误消息的完整报告,因此请勿在生产环境中执行此操作.
使用管道符号| 允许您在大多数PHP方法和函数中设置多个常量.PDO,mysqli,filter_var等都使用管道来设置相同类型的多个可选参数,或者使用"按位分离标志"来使用它的奇特术语.懒人的数组参数.
| 归档时间: |
|
| 查看次数: |
6676 次 |
| 最近记录: |