2012-05-15 42 views
1

對於這個問題的新手道歉。我剛開始一個項目,我有一個ID數組來從表中獲取某些記錄。什麼是最好的方式去做這件事?從數組ID中獲取數據庫結果

請問以下工作?

public function getWork($slideIDs) { 
    $params = array(); 
    $params = $slideIDs; 

    $count = count($params); 

    for($i=0;$i<$count;$i++) { 
     $STH = $this->_db->prepare("SELECT * 
      FROM slides 
      WHERE slideID = :slideID;"); 

     $STH->execute($params[$i]); 
    } 

    $result = $STH->fetchAll(PDO::FETCH_ASSOC); 

    return $result;  
} 

謝謝。

+0

這是行不通的。每次執行循環後,您都需要存儲結果。查看替代方案的答案。 –

回答

2

更好的使用IN子句

SELECT * FROM slides WHERE slideID IN (1,2,3,4,5, ...) 

由於較少的連接和前往該數據庫通常是獲得更好的性能來執行只是一個SQL語句。

因此,只要建立一個SQL字符串在你的循環,然後將執行至底部

+0

您是第一個給出有用答案的,謝謝! –

2

調整你的PHP創建一個單一的查詢字符串格式:

SELECT * 
FROM slides 
WHERE slideID IN (2,5,11) 

不要執行多個查詢。 :)

2

別人一樣(你的外循環);)

使用implode($array, ",")得到應進入部分IN()聲明

1

以下應該工作。使用implode創建包含由逗號分隔的ID以傳遞給SQL的必需字符串。

function getWork($slideIDs) { 
    $params = implode(",",$slideIDs); 
    $STH = $this->_db->prepare("SELECT * 
      FROM slides 
      WHERE slideID in (:slideID);"); 

    $STH->execute($params); 

    $result = $STH->fetchAll(PDO::FETCH_ASSOC); 

    return $result; 
    }