【问题标题】:CodeIgniter Possible to Show MySQL Query in Error Log?CodeIgniter 可以在错误日志中显示 MySQL 查询吗?
【发布时间】:2011-08-04 06:56:45
【问题描述】:

我的 CodeIgniter 日志中总是出现错误,例如

ERROR - 2011-04-12 00:06:44 --> Query error: Duplicate entry '1391280167' for key 1

但如果没有上下文,它并没有多大帮助。是否有任何方法可以记录导致此错误的查询?

【问题讨论】:

    标签: php codeigniter logging


    【解决方案1】:

    我只是快速浏览了system/database/DB_Driver.php(第 323 行)文件,它没有使用您选择的任何设置记录 SQL 查询。但是,如果您处于 db_debug 模式,它应该将这些消息打印到屏幕上。

    如果您不介意弄乱 CI 系统文件夹中的文件,您可以通过将 system/database/DB_Driver.php(第 323 行,对于 CI 2.0.1)更改为:

    log_message('error', 'Query error: '.$error_msg. ' - '. $sql);
    

    【讨论】:

      【解决方案2】:

      首先,您可以使用 $this->db->last_query()

      获取运行的最后一个查询

      所以我们可以使用以下 sn-p 将查询作为字符串获取:

      // strip out line returns, new lines and tabs
      $query = str_replace( array("\r", "\n", "\t"), '', trim($this->db->last_query()) );
      

      一旦你有了一个字符串,我们就可以记录到错误日志中:

      error_log( "Last database query: " . $query );
      

      注意:根据您的应用程序逻辑和流量,随着时间的推移,这可能会给错误日志增加大量额外的膨胀,因此我建议仅将其用作临时故障排除工具。 p>

      希望对您有所帮助。

      【讨论】:

        【解决方案3】:

        检查您是否在插入的表中为主键定义了自动增量。

        【讨论】:

        • 我没有。我有许多具有许多 UNIQUE 索引的表,因此很难找到它。能够看到查询将使事情变得更好。
        • 将 Codeigniter 的错误报告设置为 E_ALL 并确保 database.php 文件中的 db_debug 设置为 TRUE。
        • 检查此扩展以进行 CI 错误处理:hg.dhorrigan.com/codeigniter-uhoh/src
        • 我启用了 E_ALL 和 db_debug,但查询仍然没有显示。感谢扩展 Marko 的链接,这是一个可能的解决方案。但是,是否没有本地方法可以获取此功能?
        • @Marko Aleksić:链接已失效
        猜你喜欢
        • 1970-01-01
        • 2013-05-26
        • 2016-08-21
        • 1970-01-01
        • 1970-01-01
        • 2020-11-25
        • 2012-08-23
        • 2017-04-29
        • 1970-01-01
        相关资源
        最近更新 更多