Mysqli的增强调试功能是什么?

时间:2013-02-03 08:40:51

标签: php mysql debugging mysqli

mysqli overview page上有一系列好处,旨在引诱我进入mysqli领域。我甚至不理解其中许多的含义,但我真的很感兴趣:增强的调试功能。

根据我的经验,准备好的语句(被认为是主要的和主要使用的mysqli功能)使调试动态SQL变得非常困难 - 你只是不能定期查询准备好的查询以便在控制台中复制。
所以,我很想知道这些功能是什么以及如何使用它们 它是在调试SQL还是其他东西上? 怎么用呢? 什么是实际用例?

2 个答案:

答案 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函数/方法。