如何在PHP_MySQL中的SQL查询中使用数组值

时间:2015-10-06 16:12:27

标签: php html mysql

我从下拉列表中获取用户的多个值。我将这些值存储在php中的数组中。一切都好。现在我想使用这些数组值来查询我的数据库以提供所需的结果。 我的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循环,但它只取最后一个值。 谢谢你的帮助。

3 个答案:

答案 0 :(得分:3)

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

大致顺序:

  1. HTML 可以通过网址和表单帖子(以及其他HTTP方法)将值传递给PHP
  2. PHP 可以将值传递给MySQL ,方法是将其变量打印到MySQL“查询字符串”中( beware of MySQL string injection
  3. MySQL 会根据查询字符串通过查询引擎将其数据返回给PHP
  4. PHP 可以将值“传递”到HTML ,方法是将其变量打印到HTML输出中。
  5. 因此,要从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字符串注入”(使用您的网页的人可以更改您的数据库所做的调用)上面链接的问题,因为您正在从中获取值“user”/“client”(通过URL或表单发布)。

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

答案 1 :(得分:1)

您正在寻找的IN子句:

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

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

答案 2 :(得分:0)

<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

?>

享受编码。欢呼声。