【问题标题】:How to use array values in SQL query in PHP_MySQL如何在 PHP_MySQL 的 SQL 查询中使用数组值
【发布时间】:2015-10-06 16:12:26
【问题描述】:

我从下拉列表中获取用户的多个值。我将这些值存储在 php.ini 中的一个数组中。一切都很好。现在我想使用这些数组值来查询我的数据库以给出所需的结果。 我的html代码是

<select multiple name="equipment[]">
    <option  value="all">ALL</option>
    <option  value="helmet">HEMLMET</option>
    <option  value="boots">BOOTS</option>
    <option  value="jacket">JACKET</option>
    <option  value="flask">FLASK</option>
</select>
$equipment=$_POST['equipment'];

我用这块来存储值。

现在基于数组中的一个或多个值;我想过滤我的查询。

Select w,x,y,z from table_a inner join table_b where table_a.w="the values in array";

我尝试使用 foreach 循环,但它只取最后一个值。 谢谢你的帮助。

【问题讨论】:

    标签: php html mysql


    【解决方案1】:

    请记住,HTML、PHP 和 MySQL 是三种不同的处理环境,因此它们都不共享相同的内存(变量)或代码(例如循环)。

    大致顺序:

    1. HTML 可以通过 URL 和表单帖子(和其他 HTTP 方法)“传递”值到 PHP
    2. PHP 可以通过将其变量打印到 MySQL“查询字符串”(beware of MySQL string injection)
    3. ,将值“传递”到 MySQL
    4. MySQL 根据查询字符串,通过查询引擎将其数据返回给 PHP
    5. PHP 可以通过将其变量打印到 HTML 输出中来将值“传递”到 HTML

    因此,要从 PHP 获取对 MySQL 的变量选择,您需要编写一个“查询字符串”来查找所有答案。

    它看起来像这样:

    SELECT w,x,y,z
    FROM table_a
    INNER JOIN table_b
    WHERE table_a.w IN ('helmet', 'boots', 'jacket');
    

    有关这方面的更多帮助,请参阅 MySQL Expression syntax

    要构建它,您需要非常小心地阅读上面链接的“MySQL 字符串注入”(使用您的网页的人可以更改您的数据库进行的调用)问题,因为您从“用户”/“客户”(通过 URL 或表单帖子)。

    Can I bind an array to an IN() condition? 的答案对于如何构建具有数组值的查询字符串同时防止注入攻击有一些很好的建议。

    【讨论】:

      【解决方案2】:

      这是您要查找的 IN 子句:

      select * from tableA inner join on tableB on ... where tableA.w in ('value1', 'value2')
      

      您可以在 php 中使用循环或 implode() 函数来生成 in 子句。请注意,如果您在控件中仅选择一项,则 $_POST['equipment'] 将是一个字符串,而不是一个数组。因此,使用 is_array() 来确定是否选择了多个值。

      【讨论】:

        【解决方案3】:
        <form action='somepage.php' method='POST'>
            .
            .
            <select multiple name="equipment[]">
                <option  value="all">ALL</option>
                <option  value="helmet">HEMLMET</option>
                <option  value="boots">BOOTS</option>
                <option  value="jacket">JACKET</option>
                <option  value="flask">FLASK</option>
            </select>
            .
            .
        </form>
        

        somepage.php

        <?
        $equipment=$_POST['equipment'];
        
        $TotalEquipment=sizeof($equipment); //Count total number of equipements selected
        $values=""; //initialize values as empty.
        
        for($i=0;$i<$TotalEquipment;$i++)
        {
            $valu=$equipment[$i];
            if($i==0)
            {
                $values="'".$valu."',";
            }
            else
            {
                $values=$values."'".$valu."',";
            }
        }
        
        $values=rtrim($values, ","); //For removing last comma (,) from the string
        
        $Query="SELECT w,x,y,z 
                FROM table_a
                INNER JOIN table_b
                WHERE table_a.w IN ($values)";
        
        //Here, execute your $Query with appropriate mysql functions
        
        ?>
        

        享受编码。干杯。

        【讨论】:

          猜你喜欢
          • 2011-02-20
          • 1970-01-01
          • 1970-01-01
          • 2015-09-30
          • 2017-03-17
          • 2016-08-23
          • 2010-12-15
          • 2020-02-24
          • 1970-01-01
          相关资源
          最近更新 更多