问题描述
|
索引页面的另一页显示了Pizzashop的目录。每个披萨都是将ID传递到此页面的超链接。
我的问题的核心在于以foreach循环开头的代码。我只想根据手头的SELECT查询从数据库中读出。
我知道将查询放入循环很奇怪,但是目前这是我弄清楚如何循环遍历SESSION数组中所有id的唯一方法。
我尝试了很多事情来输出查询应该提供的返回值,我在弄乱MysqLi_stmt的事情,这一切都给了我许多错误。
<?PHP
session_start();
require \'pizza_sc_fns.PHP\';
require \'header.PHP\';
@$pizzaId = $_GET[\'pizza_id\'];
if (!isset($_SESSION[\'order\']))
{
$_SESSION[\'order\'] = array();
$_SESSION[\'items\'] = 0;
$_SESSION[\'totalprice\'] = 0.00;
}
if (isset ($_SESSION[\'order\'][$pizzaId]))
{
echo $_SESSION[\'order\'][$pizzaId]++;
echo \"\\$_SESSION[\'order\'][\\$pizzaId] is SET \\n\";
}
else
{
echo $_SESSION[\'order\'][$pizzaId] = 1;
}
$conn = connect2db();
foreach ($_SESSION[\'order\'] as $pizzaItem)
{
$query = \"SELECT pizza_name FROM pizzas WHERE pizza_id = $pizzaItem\";
$res = @$conn->query($query);
echo $res->fetch_assoc();
echo \"<hr />\";
//$query = MysqLi_prepare($conn,\"SELECT * FROM pizzas WHERE pizza_id=$pizzaItem\");
//echo var_dump($query).\"<br />\";
//$stmt_exec = MysqLi_stmt_fetch($query);
//print $pizzaItem.\"<br />\";
}
?>
<a href=\"logout.PHP\"> Destroy session >> </a>
解决方法
您将需要使用循环,但无需为每次迭代都运行查询。您可以使用in子句。
您的代码将类似于
$query = \'Select pizza_name from pizzas where id in (\';
foreach($_SESSION[\'order\'] as $pizza_id) {
$query.= mysql_real_escape_string($pizza_id).\',\';
}
$query= substr($query,-2); //Get rid of the trailing comma and space
$query .= \')\';
您可以运行查询。
我建议您使用准备好的语句,尽管我不确定如何将它们用于in语句。