PHP数组元素作为SQL IN运算符的参数

时间:2014-07-01 21:16:16

标签: php sql arrays select

$option_meno = ["Lukas", "Ivka"];
$sql = "SELECT * 
        FROM uctovnictvo 
        WHERE meno IN ('$option_meno[1]', '$option_meno[0]')
          AND datum BETWEEN '$date_start' AND '$date_end'
        ORDER BY $order ";

当然,必须有一种更好的方法来根据名称(meno)选择用户。 $option_meno数组中可以有更多或更少的名称。

我想特别注意这比列出选项数组('$option_meno[1]','$option_meno[0]')中的每个索引更简单。

2 个答案:

答案 0 :(得分:2)

您可以使用一些数组函数自动生成正确的IN语句

$option_meno = ["Lukas","Ivka"];
$in = implode(',', array_map(function($item) use ($pdo) {
    return '"' . $pdo->quote($item) . '"';
}, $option_meno);

$sql = "SELECT * FROM uctovnictvo WHERE meno IN ($in)...";

而不是PDO::quote您也可以使用mysqli_real_escape_string等等(取决于您的连接)。

答案 1 :(得分:1)

您可以使用implode()

$sql = " SELECT * 
         FROM uctovnictvo 
         WHERE meno IN ('" . implode('\', \'', $option_meno) . "') 
           AND datum BETWEEN '$date_start' AND '$date_end'  
         ORDER BY $order ";