2011-01-07 53 views
1

我遇到了一個奇怪的問題Zend_Db_Adapter_Mysqli。我需要從我的數據庫通過ID查詢多個項目,所以我有以下SQL,如何使用Zend_Db_Adapter_Mysqli :: fetchAll()中的「IN」WHERE子句進行查詢?

SELECT * FROM mytable WHERE id IN (1,2,3) 

此查詢正常工作。

然後我試着和Zend_Db_Adapter_Mysqli做到這一點編程,

$sql = 'SELECT * FROM mytable WHERE id IN (?)'; 
$ids = array(1,2,3); 
$result = $adapter->fetchAll($sql, implode(',', $ids)); 

的問題是上述PHP我只拿回1分的結果,而不是預期的3。我已經試過剛好路過$ids代替使用implode(),但我只是得到一個錯誤。

我在做什麼錯?

+1

這聽起來像一個愚蠢的問題,但是否有實際上行與IDS 1,2,3你的數據庫? :) – 2011-01-07 10:09:03

+0

@Spiny Normal:是的。 – 2011-01-07 10:21:08

回答

1

我不知道是否有幫助,但這裏有一個如何使用Zend_Db_Select對象做一個答案:How to create WHERE IN clause with Zend_Db_Select

編輯:

好吧,如果真的不行,而你打算使用一個字符串,無論如何,你就不能做到這一點:

$ids = array(1,2,3); 
$sql = sprintf('SELECT * FROM mytable WHERE id IN (%s)', implode(',' $ids)); 
$result = $adapter->fetchAll($sql); 

:)

或者甚至更好:

$ids = array(1,2,3); 
$sql = sprintf('SELECT * FROM mytable WHERE id IN (%s)', implode(',' array_fill('?', count($ids))); 
$result = $adapter->fetchAll($sql, $ids); 

但是,我不確定fetchAll會接受這個。

+0

我看到了,但是我們不能使用它,因爲我們使用了「SELECT SQL_CACHE」,而你無法使用Zend_Db_Select。 – 2011-01-07 10:22:18

0

事實上,你只有一個結果是由於MySQL解釋字符串'1,2,3'1。你會明確地有三個問號添加到查詢:

$ids = array(1,2,3); 
$sql = 'SELECT * FROM mytable WHERE id IN (?, ?, ?)'; 
$result = $adapter->fetchAll($sql, $ids); 

你可以寫,將改變$ids以問號權數的函數。

相關問題