1

ユーザーは製品リストを取得し、このリストを、数量が事前に入力されたテキスト ボックスのあるページに表示します。ユーザーはこれらの数量を変更でき、フォームはこのデータを更新ページに送信します。次のステートメントを使用して、データベースの更新を実行しています..

$sql  = "UPDATE reservations SET quantity=? WHERE tableID= ?";

これは、ユーザーがテキストボックスにゼロを入力した場合を除いて、どの値に対しても完全に機能し、その後、更新はこの値をスキップして既存の値のままにします。私はデータベースに直接アクセスし、問題なく値を手動でゼロに変更できますが、機能しない Web ベースのステートメントのようです。INTに設定され、VARCHARも試しましたが、どちらもうまくいきませんでした。SQL ステートメントがゼロ (0) 値を無視する原因は何ですか?

完全な更新コードは

$opt = array(
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
);
$conn = new PDO($dsn, $username, $password, $opt);
$sql  = "UPDATE reservations SET quantity=? WHERE tableID= ?";
$stmt = $conn->prepare($sql);
foreach($_POST["Quantity"] as $id => $quantity) {
    if ($quantity) $stmt->execute(array($quantity, $id));
}
4

1 に答える 1

6

問題はここにあります:

if ($quantity) $stmt->execute(array($quantity, $id));

0 は false と評価されるため、この if ステートメントは、$quantityゼロの場合に実行コマンドをスキップします。

なぜこの if ステートメントを最初に持っていたのかわかりませんが、条件を に置き換える必要があるかもしれません$quantity || $quantity==="0"

于 2013-08-30T19:47:18.467 に答える