基本上我想要实现的是通过一个数组并根据该数据进行查询 - 例如名称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";
?>
但这仅显示应该从查询中挑选的最后一项,非常感谢任何帮助。
答案 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>
另外要小心其他答案,因为他们没有考虑安全性,因为数据库输入应该被转义。