2019年8月27日 星期二

PHP PDO IN 條件

使用PHP PDO 在組合查詢語法時若有 IN 條件,通常會用此方法
$myArray = array(1,2,3);
$in = trim(str_repeat('?,', count($myArray)),',');
$stm = $conn->prepare("SELECT * FROM table WHERE id IN ($in)");
$stm->execute($myArray);
萬一遇上 $myArray 的個數很多時,會造成語法太長,無法執行怎麼辦?
試試下面這個方法
$myArray = array(1,2,3);
$in = implode(',', $myArray);
$stm = $conn->prepare("SELECT * FROM table WHERE FIND_IN_SET(id, :inArray) ORDER BY name");
$stm->bindParam('inArray', $in);
$stm->execute();
如果是 not in,就加上一驚嘆號,變成 !FIND_IN_SET 就可以了
$myArray = array(1,2,3);
$in = implode(',', $myArray);
$stm = $conn->prepare("SELECT * FROM table WHERE !FIND_IN_SET(id, :inArray) ORDER BY name");
$stm->bindParam('inArray', $in);
$stm->execute();