0

members と orders という名前の 2 つのテーブルがあります。

メンバー表 メンバー列

Orders テーブル 注文欄 私の php コードでは、メンバーの ID テーブルの外部キーである members_id に基づいて、Orders テーブルの列を更新したいと考えていました。

これは私がそれを置く方法です:

$query = "UPDATE orders 
          SET package='$package', comments='$comments', refno='$refno', status='no'
          WHERE members_id.username='$username'";

WHERE クエリの部分で行き詰まっています。

4

4 に答える 4

5

usernameに基づいて順序を更新する必要がある場合はJOIN、メンバー テーブルが必要です。

UPDATE orders o
  INNER JOIN members m ON m.id = o.member_id
  SET o.package='$package', o.comments='$comments', o.refno='$refno', o.status='no'
  WHERE m.username='$username'

または、最初に適切なメンバー IDSELECT id FROM members WHERE username=...を取得し、それを更新クエリで使用します。

PS: クエリ内に配置するすべての値をエスケープすることを忘れないでください。

于 2012-06-20T14:58:01.157 に答える
1

これを試して:

UPDATE orders o
INNER JOIN members m
ON o.member_id = m.id
SET package='$package', 
    comments='$comments', 
    refno='$refno', status='no' 
WHERE members_id.username='$username'

PDOまたはパラメーターをサニタイズするその他の方法を使用してクエリを SQL インジェクションから保護する必要があります

于 2012-06-20T14:59:32.710 に答える
1
$query = "UPDATE orders SET package='$package', comments='$comments', refno='$refno', status='no' WHERE members_id=(select member_id from members where username='$username')";

通常、レコードを識別するには、php/sql コードでユーザー名ではなく主キー (member_id) を使用する必要があります。これにより、SQL インジェクションのリスクが低くなり、ユーザー名が一意でない場合の問題を回避するのに役立ちます。

于 2012-06-20T15:01:34.807 に答える
1

正しいクエリは次のようになります。

$query = "";

$query .= "UPDATE orders";
$query .= "SET  package='$package'";
$query .= ",comments='$comments'";
$query .= ",refno='$refno'";
$query .= ",status='no'";
$query .= "WHERE members_id=(";
$query .= "    SELECT id FROM members WHERE username='$username'";
$query .= ")";
于 2012-06-20T15:03:00.600 に答える