【问题标题】:Passing an array to mysql [duplicate]将数组传递给mysql [重复]
【发布时间】:2010-11-24 06:27:29
【问题描述】:

我目前有一个值数组(business_id's)

说出来

Array
(
[0] => 12
[1] => 14
[2] => 15
)

使用这些值中的每一个从数据库中获取每个 business_id 的关联行信息的最佳方法是什么。

我的问题是一对一查询。显然,你可以这样做

$q = "select * from business where business_id = 12";
$rs = mysql_query($q);

【问题讨论】:

    标签: php mysql


    【解决方案1】:
    $ids = array(1, 2, 3, 4);
    
    $ids = join(', ', $ids);
    $query = "SELECT * FROM business WHERE business_id IN ($ids)";
    // $query => SELECT * FROM business WHERE business_id IN (1, 2, 3, 4)
    

    通常的 SQL 注入警告仍然适用,您可能需要先循环遍历 id 以验证或转义它们。此外,如果您希望使用字符串而不是数字,请使用:

    $ids = array('a', 'b', 'c', 'd');
    
    $ids = join("', '", $ids);
    $query = "SELECT * FROM business WHERE business_id IN ('$ids')";
    // $query => SELECT * FROM business WHERE business_id IN ('a', 'b', 'c', 'd')
    

    【讨论】:

      【解决方案2】:

      使用 SQL IN 操作:

      $sql = 'SELECT * FROM business WHERE business_id IN (' . implode(',', $values) . ')';
      $rs = mysql_query($sql);
      

      注意:如果值来自客户端,则应使用mysql_real_escape_string() 对它们进行清理,或者因为这些是数字,您可以使用intval()。例如:

      $ids = array_map('intval', $values);
      $sql = 'SELECT * FROM business WHERE business_id IN (' . implode(',', $ids) . ')';
      $rs = mysql_query($sql);
      

      【讨论】:

        【解决方案3】:

        您可以使用逗号作为分隔符连接数组,并使用 SQL IN 语句。

        $businessIds = join(",", $array);
        $q = "select * from business where business_id IN ($businessIds)";
        $rs = mysql_query($q);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-04
          • 2014-01-10
          • 1970-01-01
          • 2011-06-20
          相关资源
          最近更新 更多