0

PHPを使用してmySQLテーブルを更新しようとしています。基本的に、ordernumber (int) を渡し、それを使用して isbn と quantityordered の両方を検索し、それを使用して別のテーブルを更新します。

$orderID=$_POST["order_ent_number"];

$query="select ISBN from Orders where orderNumber='$orderID'";

$isbn = mysql_query($query) or die(mysql_error());


$query="select quantityOrdered from Orders where orderNumber='$orderID'";

$quantityordered = mysql_query($query) or die(mysql_error());



$query="UPDATE Books SET inStock='$quantityordered' WHERE inStock='0' AND isbn='$isbn'";

        $result = mysql_query($query) or die(mysql_error());

したがって、MySQL ベンチを使用すると、クエリが機能し (すべての変数を数値に置き換えた場合)、それが変更されます。問題は、PHP で変数を使用すると、コードが機能しないことです。mysql_escape_string を試しましたが、うまくいきませんでした。$isbn と $quantityordered の両方の変数の結果を確認したところ、正しい結果が得られました。サーバーで実行してもエラーは発生しませんが、データベースの inStock に変更はありません。周りを検索した後、誰かが私の変数を整数に変換する必要があると言いましたか? これが正しいかどうかはわかりませんが、私が思いついたのはそれだけです。助言がありますか?

4

2 に答える 2

1

UPDATE実際には、テーブルを結合することで単一のステートメントで実行できます。

UPDATE  Books a
        INNER JOIN Orders b
            ON a.ISBN = b.ISBN
SET     a.instock = a.quantityOrdered
WHERE   a.instock = 0 AND
        b.OrderNUmber = '$orderID' AND
        a.ISBN = '$isbn' 

補足として、変数のSQL Injection値が外部から取得された場合、クエリは脆弱です。予防方法については、以下の記事をご覧ください。を使用すると、値を一重引用符で囲む必要がなくなります。PreparedStatements

于 2013-04-08T06:12:07.327 に答える
-1

多分あなたは試すことができます

$query="select ISBN from Orders where orderNumber='".$orderID."'";
$query="select quantityOrdered from Orders where orderNumber='".$orderID."'";
$query="UPDATE Books SET inStock='".$quantityordered."' WHERE inStock='0' AND isbn='".$isbn."'";
于 2013-04-08T06:13:22.757 に答える