2013-06-28 91 views
0

我在單個查詢中有幾個條件需要處理。基本查詢:使用從數組中取得的多個條件進行PHP PDO查詢

$query = "select * from table1 
    inner join 
     table2 on table1.id=table2.id 
    where 
     ".$condition." 
    limit 0,100;"; 

我有值的數組來查詢:

$Var = array(
    1 => array('name' => 'somename1','value' => 'somevalue1'), 
    2 => array('name' => 'somename2','value' => 'somevalue2'), 
    3 => array('name' => 'somename3','value' => 'somevalue3'), 
    4 => array('name' => 'somename4','value' => 'somevalue4') 
) 

現在,在循環

foreach($Var as $Array){ 
    $condition .= '(T1_column1 = '.$Array['name'].' and T2_column1 = '.$Array['value'].') or '; 
} 

最終結果:

$query = "select * from table1 
    inner join 
     table2 on table1.id=table2.id 
    where 
     (T1_column1 = somename1 and T2_column1 = somevalue1) or 
     (T1_column1 = somename2 and T2_column1 = somevalue2) or 
     (T1_column1 = somename3 and T2_column1 = somevalue3) or 
     (T1_column1 = somename4 and T2_column1 = somevalue4) 
    limit 0,100;"; 

有一種使用PDO做同樣事情的方法:準備,bindval呃,執行?或在foreach循環中的bindValue具有相同的效果?我怎樣才能做到這一點?

回答

0

這是PDO bind unknown number of parameters?

爲了您的方便重複,這是來自Paystey的答案代碼修改,以適應您的例子:

$sql = 'SELECT * FROM table1 
    INNER JOIN table2 ON table1.id=table2.id 
    WHERE '; 
foreach($Var as $Array) 
{ 
    $sql .= '(T1_column1 = ? and T2_column1 = ?) or '; 
    $binds[] = $Array['name']; 
    $binds[] = $Array['value']; 
} 
$prep = $db->prepare(substr($sql,0,-3) . 'limit 0,100'); 
$i = 0; 
foreach($binds as $bind){ 
    $prep->bindValue(++$i, $bind); 
} 
$prep->execute(); 

未經測試。