【问题标题】:How to use PHP Array in MySQL Select statement with BETWEEN?如何在 MySQL Select 语句中使用 PHP 数组和 BETWEEN?
【发布时间】:2012-02-21 05:59:13
【问题描述】:

我希望使用数组的内容

$arr =array(24,28,30,34, 40);

并将这些传递到 MySQL select 语句的 where 子句中,我的所有研究都表明这是通过使用 IN 一次性传递所有数组值来完成的。

我需要一次一个地传入每个数组元素,然后在 select 语句用下一个数组元素更新时,一次一个地回显 SQL 语句的结果。

刚接触编程和 PHP,所以只需要一个小例子就可以开始...

感谢 Zad 强调了真正的问题

我需要将每个数组值单独传递给 SQL 语句,因为这些值需要在带有 BETWEEN 的 Where 子句中使用,例如。 WHERE BETWEEN $array1 AND $array2 以确定年龄范围内的计数

感谢大家的意见

【问题讨论】:

  • 到目前为止你得到了什么代码?
  • 那么,你需要... WHERE age BETWEEN 24 AND 28... WHERE age BETWEEN 28 AND 30等吗?

标签: php mysql arrays


【解决方案1】:

您可以使用 implode 函数来构建包含列表的字符串;

$arr =array(24,28,30,34, 40);
$query = 'SELECT * FROM mytable WHERE id IN (' .implode($arr, ', '). ' )';
echo $query;`

http://codepad.org/tLPZxq8P

http://mx2.php.net/manual/en/function.implode.php

【讨论】:

  • 谢谢.. 但是我需要一次传入每个元素,如果我想一次传递所有数组元素,我会使用 IN
  • 为什么要一个一个传?,用IN要快很多,只需要查询一次数据库。
  • 因为我想计算每次循环的记录数
  • 例如。 SELECT COUNT(id) FROM table WHERE age = $array
  • 使用IN方法后,只需调用mysql_num_rows函数即可获取记录数。 php.net/manual/en/function.mysql-num-rows.php
【解决方案2】:

尝试转义参数

foreach($arr as $array_element) {
    $query = 'SELECT * FROM table WHERE field = \''.mysql_real_escape_string($array_element).'\'';
    //your statement
}

【讨论】:

    【解决方案3】:

    您可以使用foreach 函数:

    // make connection to mysql server
    foreach ( $arr as $element ) {
        $statement = "SELECT whatever FROM wherever WHERE something = $element"; // maybe a little validation here wouldn't hurt either
        // execute statement
        // process results
    } // end of foreach
    // close connection
    

    【讨论】:

      【解决方案4】:
      $arr =array(24,28,30,34, 40);
      $a = 'SELECT * FROM foo WHERE bar IN('.implode(',',$arr).')';
      

      编辑:我承认,我没有完全阅读问题,标题具有误导性 - 请考虑更改。

      我需要一次传入每个数组元素,然后回显 SQL 语句的结果一次一个作为 select 语句 用下一个数组元素更新。

      你能解释一下这个场景好一点吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-22
        • 1970-01-01
        • 2018-07-07
        • 1970-01-01
        • 2014-08-12
        • 1970-01-01
        • 1970-01-01
        • 2011-09-05
        相关资源
        最近更新 更多