0

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 を超える値を入力できるため、データベース構成エラーを除外しています (正しいことを願っています)。

4

2 に答える 2

0

:) i<= basket の場合の for ループで述べたとおりです。そこから、バスケットには4つの要素があるという結果になります:)それが、 <=4 のときにur sqlが実行されている理由です。あなたの db inserts limitaton は for loop のためだと思います。あなたの質問を間違って理解していたら申し訳ありませんが、最初の3行で迷子になりました:)。

PS phpmyadmin に制限がなく、動的な挿入/更新 (php スクリプト) に制限がある場合は、明らかにスクリプトのロジックに問題があります。db の制約とは関係ないと思います。PHPコードの制約を確認してください:)

PPS カートのデータを確認する

于 2012-04-13T20:14:56.897 に答える
0

ここでの実際の問題は、キーと充電器フィールドが null 値を受け入れないことだったので、デフォルトを 0 に設定しました。このエラーが発生しなかったことに驚いています。このようなエラーを見つけるスキルを磨く必要があると思います。

于 2012-04-24T17:01:48.663 に答える