我是PHP(和CodeIgniter)的新手,並且在嘗試獲取$ this-> db-> query()的簡單調用時遇到問題。在我的代碼中(查看帖子底部),我正在查看已記錄在我的數據庫表eventLog中的錯誤和警告,並將它們與已接受錯誤消息的列表進行比較。如果沒有發現任何消息在該列表中,那麼我想通過設置「ack ='t'」來確認它。然而,代碼不能成功運行,並給出了消息:來自PHP(CodeIgniter)的MySQL調用不能正常工作
錯誤編號:1064
您的SQL語法錯誤;檢查對應於你的MySQL服務器版本使用附近的「」在1號線
UPDATE事件日誌設置ACK =「T」 WHERE ID =
此消息似乎表明,「正確的語法手冊$ row ['id']「不符合我的意圖。它應該給我錯誤或警告的ID,但錯誤表明它沒有提供任何東西,或者格式錯誤。我錯過了什麼?還是有更好的方法來做到這一點,可以繞過我的問題?
我的代碼:
$acceptedMessages = array("whatever",
"whateverelse"
);
$sql = "(SELECT id, mesg FROM eventLog WHERE level = 'error') UNION
(SELECT id, mesg FROM eventLog WHERE level LIKE 'warn%')" ;
foreach ($this->db->query($sql) as $row) {
foreach ($acceptedMessages as $messagePart) {
$pos = strpos($row['mesg'], $messagePart);
if ($pos !== false) {
continue 2;
}
}
// if we get here the eventLog message didn't match any accepted messages, so
// acknowledge it
$idNum = $row['id'];
$sql3 = "UPDATE eventLog SET ack = 't' WHERE id = " . $idNum;
$res = $this->db->query($sql3);
if (!$res) { echo "Failed to acknowledge error/warning with id " . $row['id'] . " in eventLog"; }
}
謝謝,我認爲你的答案加上Sudhir的回答解決了它! – Max