【问题标题】:Storing an Error log in MySQL在 MySQL 中存储错误日志
【发布时间】:2012-12-05 20:33:32
【问题描述】:

我想将我的 PHP 创建的错误日志存储到 MySQL 表中,但没有插入任何内容。

我用于错误日志的代码是..

function myHandler($code, $msg, $file, $line) 
   {
      echo "An error occurred while processing your request. Please visit our site and try again.";  
      // log error to file, with context
      $logData = date("d-M-Y h:i:s", mktime()) . ", $code, $msg, $line, $file\n";
      die("Error");
   }

用线条

$insert = "INSERT INTO error_logs (error_message)"."VALUES ('$logData')";   
mysql_query($insert)or die(); 

将日志插入到 error_logs 表中的 error_message 列中,该列设置为 VARCHAR,上限为 250 个字符

我以为它只是在那里设置了一个东西,但显然我离题了。

【问题讨论】:

  • 没有。请不要在新应用程序中使用mysql_query。您根本无法将任意文本内容放入查询中并期望它在没有proper SQL escaping 的情况下工作。为了您自己的健康和福祉,请使用PDO 处理您的数据库调用。
  • 您是否收到错误消息?将 die() 更改为 die(mysql_error())。此外,您可能需要在 (error_message)VALUES 之间留一个空格
  • @tadman 我想你的意思是说:Please, don't use mysql_* functions in new code。它们不再维护,deprecation process 已开始使用。看到red box?改为了解prepared statements,并使用PDOMySQLi - this article 将帮助您决定哪个。如果您选择 PDO,here is a good tutorial。 ^_^
  • 将日志推送到数据库中确实不会改善问题。如果您的数据库出现故障怎么办?如果缺少数据库是您的应用程序无法运行的唯一原因怎么办?记录到文件系统要容易得多。登录到专用的日志系统(参见“logstash”或“greylog 2”)更便于浏览。
  • @Sven 错误记录到数据库 >> 错误记录 错误记录到数据库 >> 错误记录 错误记录 错误记录到数据库 >> ... *死亡螺旋到堆栈溢出*

标签: php mysql logging


【解决方案1】:

您的插入语句可以解析为:

INSERT INTO error_logs (error_message) VALUES ('foo')

哪个无效

确保把那个空间放在那里。

您可能希望将 MySQL 错误语句放入 die(..),以便下次更好地查看错误。

另外 - 请在将数据输入到语句之前转义您的数据...。您现在的操作方式可能会导致一些大的Bobby Tables 问题...

Please, don't use mysql_* functions in new code。它们不再维护,deprecation process 已开始使用。看到red box?改为了解 prepared statements,并使用 PDOMySQLi - this article 将帮助您决定哪个。如果你选择 PDO,here is a good tutorial

【讨论】:

  • 转义它,否则它不是一个有效的答案。 SQL注入并不酷。
  • 我打赌 FarmerG 会找到更好的方法来通过 php 使用 MySql 语句,无论如何@Neal's wright:FarmerG 错过了一个空格。
  • 您应该在答案中使用占位符作为 PDO 化这个答案的胡萝卜加大棒的方法,或者在通常的 mysql_real_escape_string 中钉住,这样这个答案至少不会对您的健康造成危害。
  • 从技术上讲,可以安全地投入生产,所以当然。
猜你喜欢
  • 2017-10-13
  • 1970-01-01
  • 2013-04-13
  • 1970-01-01
  • 2014-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多