【问题标题】:What are Mysqli's enhanced debugging capabilities?Mysqli 增强的调试能力有哪些?
【发布时间】:2013-01-18 05:05:03
【问题描述】:

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

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

【问题讨论】:

  • 无法判断是在拖钓还是试图做出自我回答的参考问题。 ;)
  • @KennyPowers 感谢您的评论。我问的不是“我可以采取什么措施来调试准备好的语句”(我没有使用它们,所以没有问题),而是“概述页面上提到的这些增强的调试功能是什么,它们的日常使用是什么” .

标签: php mysql debugging mysqli


【解决方案1】:

认为指的是这些:

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

除其他外,您可以create trace files

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

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

您可以在this page 上查看此类跟踪输出的示例。

【讨论】:

    【解决方案2】:

    关于prepared statement,理论上,你会在发送参数之前知道你的kwery格式错误。所以你不必怀疑是你的查询还是用户数据被窃听了,你马上就知道了。

    关于一般查询,因为 mysqli 与 MySQL5 同步,而 mysql_old 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函数/方法。

    【讨论】:

    • 您能否展示一个使用 try\catch 语法的工作示例来检测 mysqli 的 mysql 错误?提前致谢。
    • 谢谢。我希望它不会像get_result()- 那样在心情好时起作用,而是在我需要时起作用。无论如何,我坚持使用if(mysql_error()) 有一段时间了。
    • “不像get_result()”是什么意思?
    • 当我尝试使用不可或缺的函数 get_result() 时,它仅适用于某些构建。所以,我不能依赖这个功能。所以,我希望这个异常功能在不同的基础上工作,因为当我在扭动代码时,我希望它能够工作,而不是抛出错误。
    • 异常已经在 php 5 中创建。所以使用 php 4 它当然不会工作。但是既然你有 php 5 +(今天的:5.4)一切都会工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多