yii2.0 兩表聯查where條件用in 的時候,怎麼使用bindParam綁定參數

來源:互聯網
上載者:User
關鍵字 yii2 mysql php
代碼如下:

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)*/
    //-----------------------------綁定參數法-----------------------------------------    $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時,應該怎麼使用

回複內容:

代碼如下:

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)*/
    //-----------------------------綁定參數法-----------------------------------------    $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時,應該怎麼使用

請使用 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

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.