循环遍历数组并查询数据

时间:2011-04-25 18:34:56

标签: php mysql

基本上我想要实现的是通过一个数组并根据该数据进行查询 - 例如名称bob,bill,ben的数组,并根据数组中的所有项查询数据库表 - 所以SELECT * FROM table WHERE name =“$ name”。

我的代码是:

<?php 
 session_start(); 
 $array = $_SESSION['basket'];
  foreach  ($array = $_SESSION['basket'] as $value);

 $query = "SELECT * FROM catalogue WHERE plantname='$value'";
 $result = mysql_query($query) or die("Query failed : " . mysql_error()); 

echo "<table>\n"; 
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { 
   echo "\t<tr>\n"; 
   foreach ($line as $col_value) { 
       echo "\t\t<td>$col_value</td>\n"; 
   } 
   echo "\t</tr>\n"; 
} 
echo "</table>\n"; 

 ?> 

但这仅显示应该从查询中挑选的最后一项,非常感谢任何帮助。

4 个答案:

答案 0 :(得分:2)

问题在于这一行

foreach  ($array = $_SESSION['basket'] as $value);
    $query = "SELECT * FROM catalogue WHERE plantname='$value'";

首先是分号 - 它不应该在那里。另请注意,{语句周围没有} foreach,因此您为会话变量中的每个项目构建查询,但仅针对最后一个项目执行查询。

答案 1 :(得分:2)

为了获得所有可能$value的所有内容,我认为你正在尝试做的事情,你需要这样的东西:

SELECT * FROM catalogue WHERE plantname IN ('value1', 'value2')

可以通过以下方式实现:

$query = "SELECT * FROM catalogue WHERE plantname IN ('" . implode($array, "', '") . "')";

...无需多次访问数据库。

答案 2 :(得分:1)

更新:在循环之外移动查询。

<?php
    session_start();
    $array = $_SESSION['basket'];
    $query = "SELECT * FROM catalogue WHERE plantname IN ('" . implode("', '", $array) . "')";
    $result = mysql_query($query) or die("Query failed : " . mysql_error());
    echo "<table>\n";
    while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
        echo "\t<tr>\n";
        foreach ($line as $col_value) {
            echo "\t\t<td>$col_value</td>\n";
        }
        echo "\t</tr>\n";
    }
    echo "</table>\n";
?>  

答案 3 :(得分:0)

您的代码中存在许多问题。

首先,您已经分配了$ array,所以您只需要这样做:

foreach($array as $value)

其次,你不应该在循环中运行查询,因为随着每个页面请求执行的查询越多,篮子越大。

为什么不将行推入$_SESSION['basket']然后你可以循环$_SESSION['basket']来显示它而不是运行大量的查询,它会让你的代码执行得更快,而你的代码就更少了。 / p>

另外要小心其他答案,因为他们没有考虑安全性,因为数据库输入应该被转义。