2017-02-15 177 views
-3

我试图做的是将所有查询错误都插入到数据库中,但它不起作用。我想这样做:将数据库错误重新插入到数据库中

<?php 
include('db_settings.php'); 

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

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

但是,这不起作用,错误没有被提交到数据库。 你们有没有人知道这个解决方法?

(有人问之前,DB和变量的所有参数都是正确的)。

+0

因为它似乎'$ query = $ conn-> query(“mysql_query here”);'正常运行,这就是为什么如果块条件变为假 –

+0

你检查过自动提交是否启用?如果不是,使用提交也许可以解决 – Massimo

+0

**警告**:使用'mysqli'时,您应该使用[参数化查询](http://php.net/manual/en/mysqli.quickstart.prepared-statements。 php)和['bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php)将用户数据添加到您的查询中。 **不要**使用字符串插值或连接来完成此操作,因为您创建了严重的[SQL注入漏洞](http://bobby-tables.com/)。 **绝不**将'$ _POST'或'$ _GET'数据直接放入查询中,如果有人试图利用您的错误,这会非常有害。 – tadman

回答

3

你根本不应该那样做。

不要试图用非常即时失败的媒介!

让我们来看看你最近的一个问题:在这里困扰你的错误信息Mysqli Commands out of sync将会阻止你的wunderlogging正常工作!你的数据库不会被魔法同步!这样可以有效地防止你记录自己的错误。所以你根本不会有一个想法发生。

让错误为记录,然后你将能够找到他们。

在你的代码的顶部添加以下三行,

ini_set('log_errors',1); 
error_reporting(E_ALL); 
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 

,然后检查服务器错误日志。

这是每个人都这样做的方式,没有理由设计出这样一个尴尬和不合逻辑的设备。

+0

我需要他们可以通过网页阅读,我不能总是直接访问服务器来查看文件...我显然不能给我的root密码给每个人都应该有日志访问大声笑 – BlackSys

+0

好吧,所以基本上你的说每个人都应该查看错误日志,暴露服务器的安全......这是没有道理的。为什么我应该给所有“员工”人员提供root密码,实际上应该查看日志?这不能完成我的请求 – BlackSys

+1

这是垃圾。再次,这不是你想要的*,而只是你可以做的:如果你的服务器已经消失,你不能在数据库中添加记录!不用提,你的反对意见也不会那么荒谬:你可以完全控制日志应该存储的地方。 –