MySQL データベースに注文を入力しようとしています。注文テーブルに注文ごとに 1 つのレコードを追加し、バスケット内のすべてのアイテムをループ処理します。次に、各アイテムの情報を選択し、そのアイテムのコミット済み在庫を変更してから、その情報をordered_products テーブルに追加します。ここに問題があります。PHP を介して SQL を実行すると、product_id が 4 以下でない限り、ordered_products テーブルに追加されません。これは、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 を超える値を入力できるため、データベース構成エラーを除外しています (正しいことを願っています)。