yii2.0 两表联查where条件用in 的时候,怎么使用bindParam绑定参数

WBOY
Freigeben: 2016-06-06 20:06:08
Original
1475 Leute haben es durchsucht

代码如下:

<code>public function test()
{
   $a = array(1,2,3,4,5);
    $uid = implode(',', $a);
    $sql = "SELECT A.uid,B.id,B.state FROM A
        LEFT JOIN B ON A.id=B.id
        WHERE A.uid in ($uid)";
    $cmd =  Self::getDb()->createCommand($sql);
    $res =  $cmd->queryAll();
    /*var_dump($res);
    array (size=3)
        0 => 
            array (size=6)
              'uid' => string '1' (length=2)
              'id' => string '1100' (length=5)
              'state' => string '2' (length=1)
        1 => 
            array (size=6)
              'uid' => string '2' (length=2)
              'id' => string '1200' (length=5)
              'state' => string '2' (length=1)
        2 => 
            array (size=6)
              'uid' => string '3' (length=2)
              'id' => string '1300' (length=5)
              'state' => string '2' (length=1)*/
</code>
Nach dem Login kopieren
Nach dem Login kopieren
<code>    //-----------------------------绑定参数法-----------------------------------------
    $sql2 = "SELECT A.uid,B.id,B.state FROM A
        LEFT JOIN B ON A.id=B.id
        WHERE A.uid in (:uid)";
    $cmd2 =  Self::getDb()->createCommand($sql2);
    $cmd2 -> bindParam(":uid",$uid);
    $res2 =  $cmd2->queryAll();
    /*var_dump($res2);
    array (size=3)
        0 => 
            array (size=6)
              'uid' => string '1' (length=2)
              'id' => string '1100' (length=5)
              'state' => string '2' (length=1)*/
}


假如$sql得到的结果有三条数据,用$sql2得到的结果只有一条数据(经测试,调换$a里元
素的位置发现,$res2的数据一直是$a里第一个有数据的元素所对应的那条数据)。
经过测试和了解,发现bindParam会在替换占位符时会在参数外边加一个单引号,这样我
的in条件里边就变成了一个整体,而不是五个值。

问题:
1.就算作为一个整体,为什么还会得到一条数据呢。
2.本题怎么改正
3.YII2里,如果要使用占位符,where条件要用到in时,应该怎么使用</code>
Nach dem Login kopieren
Nach dem Login kopieren

回复内容:

代码如下:

<code>public function test()
{
   $a = array(1,2,3,4,5);
    $uid = implode(',', $a);
    $sql = "SELECT A.uid,B.id,B.state FROM A
        LEFT JOIN B ON A.id=B.id
        WHERE A.uid in ($uid)";
    $cmd =  Self::getDb()->createCommand($sql);
    $res =  $cmd->queryAll();
    /*var_dump($res);
    array (size=3)
        0 => 
            array (size=6)
              'uid' => string '1' (length=2)
              'id' => string '1100' (length=5)
              'state' => string '2' (length=1)
        1 => 
            array (size=6)
              'uid' => string '2' (length=2)
              'id' => string '1200' (length=5)
              'state' => string '2' (length=1)
        2 => 
            array (size=6)
              'uid' => string '3' (length=2)
              'id' => string '1300' (length=5)
              'state' => string '2' (length=1)*/
</code>
Nach dem Login kopieren
Nach dem Login kopieren
<code>    //-----------------------------绑定参数法-----------------------------------------
    $sql2 = "SELECT A.uid,B.id,B.state FROM A
        LEFT JOIN B ON A.id=B.id
        WHERE A.uid in (:uid)";
    $cmd2 =  Self::getDb()->createCommand($sql2);
    $cmd2 -> bindParam(":uid",$uid);
    $res2 =  $cmd2->queryAll();
    /*var_dump($res2);
    array (size=3)
        0 => 
            array (size=6)
              'uid' => string '1' (length=2)
              'id' => string '1100' (length=5)
              'state' => string '2' (length=1)*/
}


假如$sql得到的结果有三条数据,用$sql2得到的结果只有一条数据(经测试,调换$a里元
素的位置发现,$res2的数据一直是$a里第一个有数据的元素所对应的那条数据)。
经过测试和了解,发现bindParam会在替换占位符时会在参数外边加一个单引号,这样我
的in条件里边就变成了一个整体,而不是五个值。

问题:
1.就算作为一个整体,为什么还会得到一条数据呢。
2.本题怎么改正
3.YII2里,如果要使用占位符,where条件要用到in时,应该怎么使用</code>
Nach dem Login kopieren
Nach dem Login kopieren

请使用 Yii2 提供的AR直接操作,请参考 http://www.yiiframework.com/doc-2.0/guide-db-active-record.html

http://stackoverflow.com/questions/14767530/php-using-pdo-with-in-clause-array

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!