Php 会话中有多个值,但只有第一个值将进入数据库
我有一个会话,它是通过向购物车中的产品添加选项来构建的。(此处未描述工作正常的部件。) 这些选项进入如下会话:Php 会话中有多个值,但只有第一个值将进入数据库,php,mysql,session,Php,Mysql,Session,我有一个会话,它是通过向购物车中的产品添加选项来构建的。(此处未描述工作正常的部件。) 这些选项进入如下会话:$\u会话['options.$id],其中在调用前面的代码块之前识别$id 我想在下面的代码中插入会话中的每一项作为数据库表中的新行 foreach($_SESSION['options'.$id] as $option) { echo $option; $statement = "INSERT INTO KC_OrderOptions (orderNumber, o
$\u会话['options.$id]
,其中在调用前面的代码块之前识别$id
我想在下面的代码中插入会话中的每一项作为数据库表中的新行
foreach($_SESSION['options'.$id] as $option)
{
echo $option;
$statement = "INSERT INTO KC_OrderOptions (orderNumber, optionName, productID) VALUES (:orderNumber, :optionName, :productID)";
$query = $db->prepare($statement);
$results = $query->execute(array(
":orderNumber" => $orderNumber,
":optionName" => $option,
":productID" => $item
));
}
现在,在我构建的会话中,行echo$选项代码>显示以下内容:
Swedish Fish AssortedSmooth n Melty Mints LargeNonpareils Milk ChocolateJelly Belly Sour Assorted
它只将瑞典鱼类分类
放入数据库。如何循环并将每个项目添加到数据库中?代码看起来是正确的;最可能的罪魁祸首是数据库表中的一个错误键,该键阻止(例如)多个具有相同orderNumber
的行存在。可能的情况是,orderNumber
是主键,这肯定会导致后续插入失败
关于准备好的语句,以及@Sean在上面的评论中提到的内容,没有必要为循环的每次迭代重新准备相同的语句(尽管您当然可以,但效率较低)。一次编写一条语句,然后使用不同的绑定参数反复执行它的优点是MySQL可以在内部进行优化以获得更好的性能
此类代码可能如下所示:
$statement = $db->prepare("INSERT INTO KC_OrderOptions (orderNumber, optionName, productID) VALUES (:orderNumber, :optionName, :productID)");
foreach($_SESSION['options'.$id] as $option)
{
$statement ->execute(array(
":orderNumber" => $orderNumber,
":optionName" => $option,
":productID" => $item
));
}
当然,这是一个可能没有太多优化的示例,但这样做可能被认为是最佳实践。数据库表是什么样子的?是否存在可能会阻止插入多个具有相同orderNumber
或productID
的行的键关系?为什么在循环中有$statement=“INSERT…”
&$query=$db->prepare($statement);
将它们移到foreach()的外部/之前
loop.@futureal--不,没有!@Sean--如果我把选项去掉,我该怎么向数据库中添加选项呢?在评论之前先阅读这个问题……它将帮助我们大家解决问题。谢谢。@futureal--我收回它!这就是问题所在,订单号被定义为键。我在表格中添加了一个id
列并使之成为主要的。运行脚本,它工作得很好!请在回答位置!