2013-08-25 87 views
0

我在MySQL查詢用下面的代碼:MYSQL IN子句錯誤

$all_PIDs=array(); 
foreach($pID as $p) 
{ 
    $all_PIDs[]=$p->ID; 
} 
$AIDS=implode(',',$all_PIDs); 
$table_tsk = new Timesheets_Table_Tasks(); 
$select_tsk = $table_tsk->select() 
      ->from($table_tsk, array 
       (
       'Total'=>'SUM(timesheets_tasks.Time)', 
       'Charged'=>'SUM(timesheets_tasks.Time_Charged)' 
      )) 
      ->where('timesheets_tasks.ProjectID IN ('.$AIDS.')') 
      ; 

但是用我收到以下錯誤上面的代碼:

"An error has occured SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '))' at line 1"

我加了引號( ")爲IN條款。但問題是查詢只顯示第一個$AIDS號碼。有人可以幫我清除錯誤嗎? 謝謝!

回答

0

它應該被指定:

->where('timesheets_tasks.ProjectID IN (?)', $all_PIDs) 

所以你傳遞一個整數數組,而不是它的逗號分隔列表

+0

謝謝您的答覆。我已經嘗試了你的建議。它顯示了錯誤的值。根據你的建議,輸出是43:30 \t 28:45。我已經嘗試了硬編碼的查詢,如: - > where('timesheets_tasks.ProjectID IN(40,118,139)')。那麼輸出是51:30-34:30。所以我認爲根據你的建議,查詢只需要第一個參數(40) – NewPHP

+0

@NewPHP:我不知道什麼是'51:30-34:30'。 「所以我認爲根據你的建議,查詢只接受第一個參數」---它接受你在數組中傳遞的任何內容。如果結果是意外的 - 請檢查你在'all_PIDs'中傳遞的內容 – zerkms

+0

我的意思是輸出。我只需要說根據你的建議輸出是不正確的。正確的輸出是51:30-34:30。但我通過使用 - > where('timesheets_tasks.ProjectID IN(?)',$ AIDS)得到43:30 \t 28:45。 – NewPHP

0

在你的代碼的報價是不是你的MySQL的一部分查詢但只有你的PHP部分。做到這一點

$AIDS= "'".implode("','",$all_PIDs)."'"; 

然後

>where('timesheets_tasks.ProjectID IN ('.$AIDS.')' 
+0

所以它會'timesheets_tasks.ProjectID IN('1,2,3')' – zerkms

+0

@zerkms,哦是的。錯過了。我現在修好了。 – Starx

+0

@zerkms,我修復了我的錯誤。爲什麼你仍然保持低調?如果您對該投票不負責,我會畫我的評論。 – Starx