Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQL仅在其中一个值_Php_Mysql_Sql_Prepared Statement - Fatal编程技术网

Php SQL仅在其中一个值

Php SQL仅在其中一个值,php,mysql,sql,prepared-statement,Php,Mysql,Sql,Prepared Statement,我正在尝试将订单输入MySQL数据库。它在订单表中为每个订单添加一条记录,然后循环遍历篮子中的所有项目。然后,它选择每个项目的信息,计算该项目的承诺库存,然后将信息添加到ordered_products表中。这就是问题所在。当通过PHP执行SQL时,它不会添加到ordered_products表中,除非product_id小于或等于4。如果从phpMyAdmin执行SQL,则情况并非如此。下面是PHP $error = false; for ($i = 0; $i < count($bas

我正在尝试将订单输入MySQL数据库。它在订单表中为每个订单添加一条记录,然后循环遍历篮子中的所有项目。然后,它选择每个项目的信息,计算该项目的承诺库存,然后将信息添加到ordered_products表中。这就是问题所在。当通过PHP执行SQL时,它不会添加到ordered_products表中,除非product_id小于或等于4。如果从phpMyAdmin执行SQL,则情况并非如此。下面是PHP

$error = false;
for ($i = 0; $i < count($basket); $i++) {
        $productid = $basket[$i]['id'];
        $quantity = $basket[$i]['quantity'];
        $postage = $basket[$i]['postage'];
        $stmt->prepare("SELECT bodywork, wheels, seat, mechanical, batteries, `range`, `keys`, charger, serial_number FROM products WHERE product_id = ?");
        $stmt->bind_param('i', $productid);
        $stmt->execute();
        $stmt->bind_result($bodywork, $wheels, $seat, $mechanical, $batteries, $range, $keys, $charger, $serialnumber);
        $stmt->fetch();
        echo 'Product id = ' . $productid . '<br />';
        $stmt->prepare("INSERT INTO ordered_products (order_id, product_id, quantity, postage, bodywork, wheels, seat, mechanical, batteries, `range`, `keys`, charger, serial_number) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
        $stmt->bind_param('iiiisssssiiis', $orderid, $productid, $quantity, $postage, $bodywork, $wheels, $seat, $mechanical, $batteries, $range, $keys, $charger, $serialnumber);
        $stmt->execute();
        $stmt->prepare("UPDATE products SET committed_stock = committed_stock + ? WHERE product_id = ?");
        $stmt->bind_param('ii', $quantity, $productid);
        $stmt->execute();
    if ($stmt->error) {
        echo 'An error occured, please try again. error = ' . $stmt->error;
        $error = true;
    } 
}
$stmt->close();
$db->close();
if (!$error) {
    //unset($_SESSION['basket']);
    echo 'Your order has been completed, thank you!';
}

我希望我在这里提供了足够的信息。因为我可以直接输入大于4的值,所以我排除了数据库配置错误,我希望这是正确的

:正如我时for循环中所述,这里的实际问题是键和充电器字段不接受空值,因此我将默认值设置为0。我很惊讶它没有给我这个错误。我想我需要学习查找此类错误的技能。

如果进入for循环,则需要移动错误,它只检查最后一项是否有错误。谢谢,Josh,我没有意识到这一点。我已经移动了它,但没有显示任何错误,订单仍在执行。我已经更新了OP以包含更改。您可能会使数据库处于不一致的状态。您应该启用PDO异常,并将整个过程封装在一个事务中,并结合一个try/catch,请参阅一个简短的示例。我已经尝试了try/catch方法,但恐怕我对PDO的了解还不够。我使用了新的mysqli'host'、'username'…,而不是新的PDO…,所以我不确定如何做PDO部分,因为据我所知,PDO和mysqli在这方面是不同的。