从会话数组数据更新数据库

时间:2014-03-20 17:42:30

标签: php mysql sql database

php

if(isset($_SESSION["basket_array"])){
    foreach($_SESSION["basket_array"] as $each_item){

        (mysql_query("UPDATE book SET copies=copies-1 WHERE bookid='$bookid'");

    }
    unset($_SESSION["basket_array"]);
    header( 'Location: account.php' ) ;
}

购物车更新库存 我正在使用这个PHP代码更新我的数据库。 它在按钮点击时激活。它接受basket_array中的项目并使用$ bookid,它意味着从数据库中留下的副本中扣除1。但它只从数组中的最后一项中扣除。 例如,如果篮子中有12个项目,则从篮子中的最后一个项目中取出12个副本。 谢谢您的帮助。如果没有掌握概念,请向我询问更多信息。

会话输出$ _SESSION [“basket_array”]

array(2) { 

[0]=> array(1) { 
["bookid"]=> string(1) "1" 
} 

[1]=> array(1) 
{ ["bookid"]=> string(1) "6" 
} 
}

1 个答案:

答案 0 :(得分:1)

foreach($_SESSION["basket_array"] as $each_item){
    (mysql_query("UPDATE book SET copies=copies-1 WHERE bookid='$bookid'");
}

您没有在查询中设置$bookid,因此每次查询运行时,它都会更新同一行。你需要在迭代循环时改变它:

foreach($_SESSION["basket_array"] as $each_item){
    $bookid = $each_item['bookid'];
    (mysql_query("UPDATE book SET copies=copies-1 WHERE bookid='$bookid'");
}

您可能需要考虑的其他一些事项 - 您没有检查您的查询是否真的有效,所以如果连接出现问题,您将永远不会知道它。

您可能还想查看切换到PDO或mysqli_函数。他们都让你使用准备好的陈述。它们将帮助您编写更安全的代码,在这种情况下,您在循环中多次运行相同的语句,他们也会更有效地执行它。