Php 在数组中循环并查询数据
基本上,我试图实现的是遍历一个数组并基于该数据执行查询-例如,名称数组bob、bill、ben并基于数组中的所有项查询数据库表-因此从表中选择*,其中name=“$name” 我的密码是:Php 在数组中循环并查询数据,php,mysql,Php,Mysql,基本上,我试图实现的是遍历一个数组并基于该数据执行查询-例如,名称数组bob、bill、ben并基于数组中的所有项查询数据库表-因此从表中选择*,其中name=“$name” 我的密码是: <?php session_start(); $array = $_SESSION['basket']; foreach ($array = $_SESSION['basket'] as $value); $query = "SELECT * FROM catalogue WHERE
<?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";
?>
问题在于这一行
foreach ($array = $_SESSION['basket'] as $value);
$query = "SELECT * FROM catalogue WHERE plantname='$value'";
首先是分号-它不应该在那里。还要注意的是,在foreach
语句周围没有{
}
,因此您为会话变量中的每个项构建了一个查询,但只对最后一个项执行它。问题在于这一行
foreach ($array = $_SESSION['basket'] as $value);
$query = "SELECT * FROM catalogue WHERE plantname='$value'";
首先是分号-它不应该在那里。还要注意的是,在
foreach
语句周围没有{
},因此可以为会话变量中的每个项构建一个查询,但只对最后一个项执行该查询。更新:将查询移动到循环外
<?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";
?>
更新:已将查询移动到循环外部
<?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";
?>
要获取所有可能的$value
的所有内容,我认为您正在尝试这样做,您需要以下内容:
SELECT * FROM catalogue WHERE plantname IN ('value1', 'value2')
这可以通过以下方式实现:
$query = "SELECT * FROM catalogue WHERE plantname IN ('" . implode($array, "', '") . "')";
…无需多次访问数据库。要获取所有可能的$value
的所有内容,我认为您正在尝试这样做,您需要以下内容:
SELECT * FROM catalogue WHERE plantname IN ('value1', 'value2')
这可以通过以下方式实现:
$query = "SELECT * FROM catalogue WHERE plantname IN ('" . implode($array, "', '") . "')";
…而不多次访问数据库。代码中存在许多问题
首先,您已分配给$array,因此只需执行以下操作:
foreach($array as $value)
其次,您不应该在循环中运行查询,因为在每个页面请求上执行的查询越多,篮子就越大
为什么不将行推到$\u会话['basket']
中,然后您可以循环$\u会话['basket']
来显示它,而不是运行大量查询,这将使您的代码执行得更快,而且您将获得更少的代码
对于其他答案也要小心,因为他们没有考虑到数据库输入应该转义的安全性。代码中存在许多问题
首先,您已分配给$array,因此只需执行以下操作:
foreach($array as $value)
其次,您不应该在循环中运行查询,因为在每个页面请求上执行的查询越多,篮子就越大
为什么不将行推到$\u会话['basket']
中,然后您可以循环$\u会话['basket']
来显示它,而不是运行大量查询,这将使您的代码执行得更快,而且您将获得更少的代码
还要注意其他答案,因为他们并没有考虑到数据库输入应该转义的安全性。foreach末尾的分号似乎是可能的原因。。。。此外,这一切都应该在foreach的范围内运行…foreach末尾的分号似乎是可能的原因。。。。这一切都应该在foreach的范围内运行…嘿,尽管我已经做到了,facepalm时刻。谢谢当它允许我的时候,我会接受答案:)。呵呵,虽然我已经这么做了,但我还是会接受。谢谢将在允许我时接受答案:)。虽然我的答案修复了给定的代码,但我更喜欢这样-保存一些到数据库的行程。实际上仍然会有一个循环,但查询不会在其中,就在它之后。@Compeek true,我会注意到,作为对我上一条注释的更正,循环将在查询之后进行,相反,你的内爆()
也不太正确。MySQLin()
中的每个值都需要用引号括起来。查看我更新的答案。虽然我的答案修复了给定的代码,但我更喜欢这样做-保存一些数据库访问。实际上仍然会有一个循环,但查询不会在其中,就在它之后。@Compeek true,我会注意到,作为对我上一条注释的更正,循环会在查询之后,而不是相反。另外,你的内爆()
不太正确。MySQLin()
中的每个值都需要用引号括起来。请参阅我的更新答案。正如@scraptfrigate在他的答案中指出的,不要通过逃避查询中的输入而忘记安全性。但我认为这超出了这个问答线程的范围。正如@scraptgrigget在他的回答中指出的,不要通过逃避查询中的输入而忘记安全性。但我认为这超出了这个问答主题的范围。