我正在尝试将订单输入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的值,所以我排除了数据库配置错误(我希望这是正确的!)。
答案 0 :(得分:0)
:)正如在i&lt; = basket中的for循环中所述。从那里结果篮子有4个元素:)这就是为什么你的sql在&lt; = 4时执行。我认为你的数据库插入限制是因为你的for循环。对不起,如果我理解错了你的问题,但我迷失在前三行:)。
P.S。如果你对phpmyadmin没有任何限制,并且你有动态插入/更新(php脚本)的限制,那么它显然与你的脚本逻辑有些不同。我不认为它与任何数据库约束有关。检查你的PHP代码约束:)
P.P.S。检查您的bascket数据
答案 1 :(得分:0)
这里的实际问题是键和充电器字段不接受空值,所以我将默认值设置为0.我很惊讶它没有给我这个错误。我想我需要努力找到这样的错误。