2017-02-15 170 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

這是垃圾。再次,這不是你想要的*,而只是你可以做的:如果你的服務器已經消失,你不能在數據庫中添加記錄!不用提,你的反對意見也不會那麼荒謬:你可以完全控制日誌應該存儲的地方。 –