2014-02-06 30 views
2

我是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"; } 
} 

回答

1

$this->db->query($sql)返回一個結果對象,但不是一個數組,使得的foreach不應該工作。試試這個:

$query = $this->db->query($sql); 
foreach ($query->result_array() as $row) { 

檢查出文檔的更多選項:http://ellislab.com/codeigniter/user-guide/database/results.html

+1

謝謝,我認爲你的答案加上Sudhir的回答解決了它! – Max

1

你可以寫簡單的查詢,比如,更改:

$sql = "(SELECT id, mesg FROM eventLog WHERE level = 'error') UNION 
      (SELECT id, mesg FROM eventLog WHERE level LIKE 'warn%')" ; 

$sql = "SELECT id, mesg FROM eventLog WHERE (level = 'error' OR level LIKE 'warn%')" ; 

AND:

$sql3 = "UPDATE eventLog SET ack = 't' WHERE id = " . $idNum; 
$res = $this->db->query($sql3); 

$act = 't'; 
$sql3 = "UPDATE eventLog SET ack = ? WHERE id = ?"; 
$res = $this->db->query($sql3, array($act, $idNum)); 

$act = 't'; 
$data = array(
    'act' => $act 
); 

$this->db->where('id', $idNum); 
$this->db->update('eventLog', $data); 

參見More

+0

還有我知道我已經把代碼中的低效部分。你指出的第一個問題是因爲我已經簡化了它在代碼中的實際出現方式,UNION是必要的。而第二個我沒有效率,只是爲了將我的問題分解開來,看看我能否鼓勵他們解決問題。 – Max

+0

好的,我會嘗試重寫我的代碼,雖然我希望別人會找出我的錯誤。 – Max