如何使用数组查询数据库? WHERE = '数组()'

Posted

技术标签:

【中文标题】如何使用数组查询数据库? WHERE = \'数组()\'【英文标题】:How to query a database with an array? WHERE = 'array()'如何使用数组查询数据库? WHERE = '数组()' 【发布时间】:2011-05-11 23:41:04 【问题描述】:

我想知道如何使用数组查询数据库,如下所示:

$query = mysql_query("SELECT * FROM status_updates WHERE member_id = '$friends['member_id']'");

$friends 是一个包含成员 ID 的数组。我正在尝试查询数据库并显示member_id 等于$friends 数组中成员ID 之一的所有结果。

有没有办法做类似WHERE = $friends[member_id] 的事情,或者我必须将数组转换为字符串并像这样构建查询:

$query = "";
foreach($friends as $friend)
  $query .= 'OR member_id = '.$friend[id.' ';

$query = mysql_query("SELECT * FROM status_updates WHERE member_id = '1' $query");

任何帮助将不胜感激,谢谢!

【问题讨论】:

快速提示:如果您的member_id 在表格中是INT,请不要引用它们。 @webbiedave 是的,你引用 INT。 MySQL 不会在看到引号时神奇地将值的类型转换为字符串。引号指定值的开始和结束。对于懒惰的打字员来说,不必引用 INT 是一个被滥用的功能。 @Mel:在这方面你绝对是少数。 【参考方案1】:

你想要IN

SELECT * FROM status_updates WHERE member_id IN ('1', '2', '3');

所以代码改为:

$query = mysql_query("SELECT * FROM status_updates WHERE member_id IN ('" . implode("','", $friends) . "')");

根据朋友数组中数据的来源,许多人希望通过mysql_real_escape_string() 传递每个值以确保没有 SQL 注入。

【讨论】:

【参考方案2】:

像这样使用 SQL IN 运算符:

// Prepare comma separated list of ids (you could use implode for a simpler array)
$instr = '';
foreach($friends as $friend)
    $instr .= $friend['member_id'].',';

$instr = rtrim($instr, ','); // remove trailing comma
// Use the comma separated list in the query using the IN () operator
$query = mysql_query("SELECT * FROM status_updates WHERE member_id IN ($instr)");

【讨论】:

【参考方案3】:
$query = "SELECT * FROM status_updates WHERE ";
for($i = 0 ; $i < sizeof($friends); $i++)
$query .= "member_id = '".$friends[$i]."' OR ";

substr($query, -3);
$result = mysql_query($query);

【讨论】:

implode 会更适合这个活动,这很可能从一开始就 - 一个 IN 会更好。

以上是关于如何使用数组查询数据库? WHERE = '数组()'的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 中 MySQL 查询的 where 子句中使用数组 [重复]

mysql原生语句where数组条件查询

thinkphp3.2.3 查询时使用where+select查询出来的比find查询多一个空数组

ThinkPHP where方法详解

查询jsonb PSQL中数组元素的where子句

尝试允许通用数组或值查询,如 rails 用于允许 where(a: [1]) 或 where(a: 1) 工作等等