在mysqli overview page上有一系列好处,旨在引诱我进入mysqli领域。我甚至不理解其中许多的含义,但我真的很感兴趣:增强的调试功能。
根据我的经验,准备好的语句(被认为是主要的和主要使用的mysqli功能)使调试动态SQL变得非常困难 - 你只是不能定期查询准备好的查询以便在控制台中复制。
所以,我很想知道这些功能是什么以及如何使用它们
它是在调试SQL还是其他东西上?
怎么用呢?
什么是实际用例?
答案 0 :(得分:5)
我认为指的是这些:
它们与mysql api不存在,只有mysqli。
除其他事项外,您还可以create trace files:
mysqli_debug("d:t:o,/tmp/client.trace");
我将跟踪理解为调试MySQL内部行为。如果您怀疑MySQL的工作方式存在问题,可以使用它。对于调试SQL,我会使用更轻量级的度量,即使跟踪确实也显示了这些度量。
您可以在this page上看到此类跟踪输出的示例。
答案 1 :(得分:1)
关于准备好的声明,理论上,在发送参数之前,您将知道您的kwery格式错误。所以你不必怀疑它是你的查询还是被窃听的用户数据,你马上就知道了。
关于一般查询,因为mysqli与MySQL5同步,而mysql_旧API仅支持MYSQL 4,您将获得更好的错误消息,或者至少是最具描述性的。
此外,您可以使用try \ catch语法来检测mysql错误,并且更容易处理异常,而不是or die....
或if(mysql_error())
。
来自您的文档:
<?php
define("MYSQL_CONN_ERROR", "Unable to connect to database.");
// Ensure reporting is setup correctly
mysqli_report(MYSQLI_REPORT_STRICT);
// Connect function for database access
function connect($usr,$pw,$db,$host) {
try {
$mysqli = new mysqli($host,$usr,$pw,$db);
$connected = true;
} catch (mysqli_sql_exception $e) {
throw $e;
}
}
try {
connect('username','password','database','host');
echo 'Connected to database';
} catch (Exception $e) {
echo $e->errorMessage();
}
关键功能是mysqli_report(MYSQLI_REPORT_STRICT)
,根据文档:
MYSQLI_REPORT_STRICT
Throw a mysqli_sql_exception for errors instead of warnings.
如eis所说,还有一个mysqli_debug
函数/方法。