在mySQL WHERE子句中传递非值

时间:2012-03-02 00:55:31

标签: php mysql

以下是我试图开始工作的查询。

$array = array();

SELECT * FROM ENTRIES
WHERE
   entry_id = '12'
OR
   entry_id_extra IN ('$array')

这当然是简化的。问题是,如果数组有项目并且它返回一切正常,它的效果很好。但是如果数组没有项目则无法工作。

如果数组中没有项目,构造此语句的正确方法是什么?我试过了IN ('NULL','$array')但是没有用。

感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

您可以使where子句的OR部分经过条件检查:

$sql = "SELECT * FROM entries WHERE entry_id = 12"

if (count($array) > 0) {
    $sql .= ' OR entry_id_extra IN ($array)';
}

答案 1 :(得分:0)

$array = array(...);
$array = array_map('mysql_escape_string', $array); // make sure it's safe
$query = "SELECT   *
          FROM     entries
          WHERE    entry_id = '12'"
       . (count($array) > 0
         ? " OR    entry_id_extra IN ('" . implode("','", $array) . "')" 
         : "");

// echo the query to see what it looks like (optional)
echo "<pre>{$query}</pre>";

您可以使用implode,但也要确保转义值,以便引号不设置查询。