6

mysqli 概述页面上有一个好处列表,旨在引诱我进入 mysqli 领域。我什至不明白其中许多的含义,但是对我来说真的很有趣:增强的调试功能。

根据我的经验,准备好的语句(被认为是主要的并且主要使用 mysqli 功能)使调试动态 SQL 变得非常困难 - 您不能将准备好的查询中的常规查询复制到控制台中。
所以,我很想知道这些功能是什么以及如何使用它们。
是在调试 SQL 还是在其他方面?
如何使用它?
什么是实际用例?

4

2 回答 2

5

认为它指的是这些:

它们不存在于 mysql api,只有 mysqli。

除其他外,您可以创建跟踪文件

mysqli_debug("d:t:o,/tmp/client.trace");

我将跟踪理解为调试 MySQL 内部行为。如果您怀疑 MySQL 的工作方式存在问题,您可以使用它。对于调试 SQL,我会使用更轻量级的措施,即使跟踪也显示了这些措施。

您可以在此页面上看到此类跟踪输出的示例。

于 2013-02-03T09:58:45.433 回答
1

关于准备好的语句,理论上,您会在发送参数之前知道您的 kwery 格式错误。因此,您不必怀疑是您的查询还是用户数据被窃听,您会立即知道。

关于一般查询,由于 mysqli 与 MySQL5 同步,而 mysql_old API 仅支持到 MYSQL 4,您将获得更好的错误消息,或者至少是最具描述性的。

此外,您可以使用 try\catch 语法来检测 mysql 错误,并且处理异常而不是or die....or更容易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.

mysqli_debug正如eis所说,还有一个功能/方法。

于 2013-02-03T09:52:19.523 回答