【问题标题】:Print informative, well formatted mysql errors in PHP在 PHP 中打印信息丰富、格式正确的 mysql 错误
【发布时间】:2011-03-27 12:18:59
【问题描述】:

Mysql 错误是您在开发过程中看到的最常见的错误之一,我正在寻找一种令人愉快且信息丰富的方式来输出它们。

phpMyAdmin 显然有一个不错的 mySQL 查询打印机:

parsed query http://img706.imageshack.us/img706/2873/clipboard02a.png

但是,它会将错误打印为简单的文本:

error output http://img683.imageshack.us/img683/1577/clipboard03g.png

而在后一个示例中,for the right syntax to use near 之后的文本可能已在查询中突出显示。像这样:

alt text http://img710.imageshack.us/img710/2839/clipboard03z.png

即使是一个简短的查询,您也会立即看到文本前面有一个多余的逗号。在更大的查询中这样做可以显着提高可读性,我很惊讶关于这个主题的许多搜索都没有找到任何结果。

一句话问题:您是否使用或知道任何这样的 PHP 类会显示漂亮的 mysql 错误以用于调试目的?

【问题讨论】:

  • 那么您的问题是如何突出显示 SQL 代码,而不是如何显示它?
  • 有区别吗?重点是尽可能清楚地显示错误。

标签: php mysql debugging pretty-print


【解决方案1】:

用自定义函数来做这件事真的很简单:

function printPrettyError($sql, $error) {
    $display = preg_replace("~^(.*to use near ')(.*)(' at line [0-9]+)$~s", '$1<u>$2</u>$3', $error);
    $display .= "<br />$sql";
}

您将不得不对其进行定制并决定是否要为 $sql 语句添加更多格式项(即在 FROM 和 ORDER BY 之前添加换行符等),但应该让您开始。

【讨论】:

  • 我知道我可以自己做,但问题是是否已经有一个(很好的)书面课程。
  • 据我所知,什么都没有想到。但我相信你可以看看 phpMyAdmin 是如何做到的,并根据你的需要进行调整,因为你似乎喜欢它的工作方式。只需确保您对它的使用符合 phpMyAdmin 的许可协议。
  • 答案在精神上是正确的,但您确实应该在将 SQL 字符串反馈回浏览器之前对其进行 HTMLSPECIALCHARS。你不想在这个问题上花费太多时间;毕竟,消除错误比让错误更漂亮更重要。只使它们足够漂亮,以便您可以解释它们,找出问题所在并修复它们。
  • Ian,这纯粹是出于调试目的,因此没有必要对输出进行 htmlescape,因为它是您自己的数据。我将奖励赏金给这个答案,因为它无论如何都会过期,但我没有将它标记为已回答 - 它不是。
【解决方案2】:

也许跑题了,但我不认为开发过程中最常见的错误是 SQL 错误。由于通常显示错误,我安装了 xDebug,它处理错误消息的“精细”调整。

【讨论】:

  • 这应该是对问题的评论,而不是答案。
  • 同意 100%。 SQL 错误相对容易避免,任何生产应用程序都不应该有出错的可能性。在数据库应用程序中进行查询开发(例如phpMyAdminMySQL Administrator 甚至mysql 命令行应用程序。 ..
  • @Raveren 我当时没有足够的积分来发表评论。
【解决方案3】:

我不确定这是否可行..

mysql 的所有错误消息都仅从这个文件中呈现 share/errmsg.txt

错误消息信息列在 share/errmsg.txt 文件中。 %d 和 %s 分别代表数字和字符串,它们在显示时被替换为 Message 值。

示例错误消息是,%s near '%s' at line %d

因此,如果我们可以在 errmsg.txt 的所有错误消息中添加一些内容,那么我们可以检查 php mysql_error 函数返回的字符串中的匹配字符串,然后将它们设为粗体或斜体..

我认为之前没有写过具体的类..

您应该从头开始,并将其制作到您自己的服务器上。

【讨论】:

  • 嘿,谢谢伙计,这真的很方便,希望我能给你赏金,但为时已晚。
  • 我很高兴这个答案对你有所帮助.. 不用担心赏金.. :)
【解决方案4】:

从网站尝试http://krumo.sourceforge.net/

简单地说,Krumo 是 print_r() 和 var_dump() 的替代品。根据定义,Krumo 是一个调试工具(最初用于 PHP4/PHP5,现在仅用于 PHP5),它显示有关任何 PHP 变量的结构化信息。

【讨论】:

  • 我使用它并不断扩展它,它实际上非常缺乏信息且默认情况下不舒服,几乎没有显示有关对象和资源变量的可用信息,并且仍然使用许多 PHP4 功能。当我完成更改后,如果许可证允许,我可能会分享代码。
猜你喜欢
  • 1970-01-01
  • 2011-10-26
  • 1970-01-01
  • 2011-08-29
  • 2014-03-12
  • 2018-07-22
  • 1970-01-01
  • 2012-09-23
  • 2012-07-28
相关资源
最近更新 更多