【问题标题】:SELECTING WHERE from array in a mysql query在 mysql 查询中从数组中选择 WHERE
【发布时间】:2013-08-13 11:27:35
【问题描述】:

我正在尝试从 mysql 查询中的数组中进行 SELECT

result = mysql_query("
SELECT * FROM fruit_db
WHERE fruit='".$url."'
")

$url 已由 $_GET 创建并分解为一个数组。例如,它可以是“苹果”或“苹果、香蕉、橙子”。不确定是否内爆回字符串。

我需要选择“apple”或“banana”或“orange”,而不是“apple,banana,orange”。

我习惯于计算字符串的元素,并循环遍历它们,但不是在 mysql 查询中,如果有简单的方法,我无法解决。 我试过类似的东西

/*    
    result = mysql_query("
    SELECT * FROM fruit_db
    WHERE fruit='".$url[0]."'
    OR  fruit='".$url[1]."'
    // etc
    ")
*/

但我不知道会有多少元素

【问题讨论】:

  • 你应该使用IN。而且你不应该再使用myqsl_* 函数了。
  • 我要说的是使用 IN 运算符

标签: php mysql arrays


【解决方案1】:

尝试使用 IN 与数组内爆 $url 类似

$sql = "SELECT * FROM fruit_db WHERE fruit IN (".implode(',',$url).")";

确保$url 是一个数组。

并尽量避免使用 mysql_* 语句,因为整个 ext/mysql PHP 扩展提供了所有以前缀 mysql_* 命名的函数,自 PHP v5.5.0 起正式弃用,并将在未来删除

您可以更好地使用另外两个MySQL 扩展:MySQLiPDO_MySQL,可以使用其中任何一个来代替ext/mysql

【讨论】:

  • 会的。一旦一切正常,我将替换不推荐使用的语法,谢谢。我是否只需将“mysql_query”替换为“MySQLi”或“PDO_MySQL”?它们是否返回相同类型的资源?
  • 是的,在 mysqli_* 中可能需要一些额外的连接设置,您可以按照使用 php.net/manual/en/book.mysqli.php
  • 再一次,你打败了我
【解决方案2】:
"SELECT * FROM fruit_db WHERE fruit IN ('".implode("','", $url)."')";

假设你的$url = array('apple','banana','orange');

那么 sql 将是:

SELECT * FROM fruit_db WHERE fruit IN ('apple','banana','orange')

【讨论】:

    【解决方案3】:

    你可以使用

    SELECT column_name FROM table_name WHERE column_name IN ("1","2");

    【讨论】:

      【解决方案4】:

      试试这个

      $url=explode(",",$_GET['fruit']);
      
      foreach($url as $fr){
        $result = mysql_query("
        SELECT * FROM fruit_db
        WHERE fruit='".$fr."'
        ")
      }
      

      【讨论】:

      • 这就是我以前的情况,投反对票的人能解释一下为什么不好吗?
      猜你喜欢
      • 2013-09-04
      • 1970-01-01
      • 2020-10-22
      • 2015-02-11
      • 2022-12-03
      • 2014-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多