【问题标题】:log all mysql errors to a database or sort off?将所有mysql错误记录到数据库或排序?
【发布时间】:2017-07-04 09:00:44
【问题描述】:

这正是我需要的:

<?php
$conn = mysqli_connect($server, $buser, $pwd, $db);

$query = $conn->query("mysql_query here");

if (!query) {
    $error = $conn->error;
    $log_error = $conn->query("INSERT INTO tab (log) VALUES ('$error')");
}
?>

但是,这不起作用,错误没有提交到数据库中。

使用数据库记录错误实际上是多么糟糕,这似乎是满足我需求的唯一方法。

需要什么:我需要记录来自查询的所有错误,无论类型如何,并将它们记录在某个可以在专用网页上查看的地方,该网页仅适用于使用 PHP 的指定级别帐户访问,只是为了显示所有这些错误。

我已经让一切正常,帐户级别等,只是似乎无法找到一种方法以以下格式在 php 页面上记录过去发生的错误:

account_who_caused_error || page_where_error_occured.php || error_message || datetime

由于我需要的性质,无法使用error_log。那么到底还有什么要做呢?

【问题讨论】:

  • $conn是什么类型的对象?
  • $conn 是一个简单的数据库连接:$conn = mysqli_connect($webserver, $webuser, $webpwd, $webdb);
  • 在数据库中记录数据库错误似乎是个坏主意 :-) 如果您需要通过网页查看日志,您仍然可以将错误记录在文本文件中并使该文件可访问,或者如果数据结构更复杂,您可以将它们存储在 json 文件或 CSV 中。
  • 你试过转义$error 变量吗? $log_error = $conn-&gt;query("INSERT INTO tab (log) VALUES ('" . mysqli_real_escape_string($error) . "')");
  • 了解preparedMySQLi 的声明。

标签: php mysql database error-handling


【解决方案1】:

$error 变量很可能包含单引号,因此导致查询格式错误。转义 $error 变量可能会有所帮助:

$conn = mysqli_connect($server, $buser, $pwd, $db);

$query = $conn->query("mysql_query here");

if (!query) {
    $error = $conn->error;
    $log_error = $conn->query("INSERT INTO tab (log) VALUES ('" . mysqli_real_escape_string ($error) . "')");
}

正如上面 cmets 中提到的,在数据​​库中记录数据库错误可能会弄巧成拙。如果您的数据库有问题,则不会记录任何错误。

【讨论】:

  • 在这种情况下,如果您知道,我如何将错误日志保存在文件中,然后使其在 php 页面上可访问,但是,在表格中格式化为 1 错误行 = 1 行,以及按列格式化的数据?比如错误类型、消息、日期时间等等?有可能吗?
  • 您可以使用fputcsv,它将输出为CSV 格式的文件。然后可以使用fgetcsv 再次读取。见php.net/manual/en/function.fputcsv.php
猜你喜欢
  • 2015-09-10
  • 1970-01-01
  • 2014-09-02
  • 1970-01-01
  • 1970-01-01
  • 2020-05-01
  • 2010-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多