如何使用数组查询数据库? 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 子句中使用数组 [重复]