2010-04-21 84 views
1

進出口使用像這樣使用的PDOPDO和SQL陳述

$states = "'SC','SD'"; 
$sql = "select * from mytable where states in (:states)"; 
$params = array(':states'=>$states); 

,我用我的功能搜索續集

$result = $this->selectArrayAssoc($sql, $params); 

在我的selectArrayAssoc功能如下

public function selectArrayAssoc($sql, $params = array()) 
{ 
    try { 
    $sth = $this->db->prepare($sql); 
    $sth->execute($params); 
    $result = $sth->setFetchMode(PDO::FETCH_ASSOC); 
    return $sth->fetchAll(); 
    } catch(PDOException $e) { 
    print $e->getMessage(); 
    //Log this to a file later when in production 
    exit; 
    } 
} 

它並不需要引用的變量,我認爲它在這種情況下會抑制如何處理這個問題。

+2

看到http://stackoverflow.com/questions/920353/php-pdo-can-i-bind-an-array-to-an-in-condition – 2010-04-21 08:25:02

回答

3

當使用預先準備好的語句佔位符(參數綁定)時,每個佔位符的出現都只包含一個變量。

你正試圖通過幾個。發生了什麼基本上是你的參數被轉義了:你的:狀態被替換爲''''''','''''''\'SC \','SD \''內部,而不是隻用原始'SC','SD'即可。

+0

讓我怎麼正是這裏通過我的價值觀,我從一個數組中解壓出來,並在這裏得到它們('sc','sd')。我嘗試了各種引用方法,一切似乎都失敗了。 – Sai 2010-04-21 08:37:05

+0

你不想引用他們。給定'$ states =''SC','SD'「;'和'$ sql =」select * from mytable where(:states)「;'中的狀態,您需要'my sql =」select * from mytable ('SC','SD')「;」中的狀態。看一看** Tom Haigh **與你聯繫的問題。 – pinkgothic 2010-04-21 08:43:28

+0

從其他問題中得到了答案,謝謝pinkgothic – Sai 2010-04-21 08:45:00

2

pinkgothic是絕對正確的。但是我認爲你遇到了這個問題,你有一系列'狀態'並且想要使用這個數組。您必須爲查詢中的每個值準備佔位符。

$states = array('SC','SD'); 
$phArray = array(); 
$valArray = array(); 

foreach($ids AS $key=>$value){ 
    array_push($phArray, ':PH' . $key); 
    $valArray[':PH' . $key] = $value; 
} 

$sql = 'select * from mytable where states in (' . implode(',', $phArray) . ')'; 
$params = array($valArray); 
$result = $this->selectArrayAssoc($sql, $params);