0

単一のクエリで実行したい条件がいくつかあります。基本クエリ:

$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: prepare,bindvalue,execute を使用して同じことを行う方法はありますか? またはforeachループのbindValueは同じ効果がありますか? これどうやってするの?

4

1 に答える 1

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();

未検証。

于 2013-06-28T18:22:23.057 に答える