【问题标题】: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:在这方面你绝对是少数。

标签: php mysql sql arrays


【解决方案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 会更好。
      猜你喜欢
      • 2014-06-01
      • 1970-01-01
      • 2018-10-24
      • 2018-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-17
      • 1970-01-01
      相关资源
      最近更新 更多