簡體   English   中英

通過外部列更新MySQL查詢

[英]Update MySQL query by foreign column

我有兩個表,分別名為members和orders。

會員表 會員專欄

訂單表 訂單欄 在我的PHP代碼中,我想基於members_id更新Orders表中的列,members_id是成員ID表的外鍵。

這就是我所說的:

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

我被困在WHERE查詢部分。

如果需要基於用戶名更新訂單,則需要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'

或替代地,首先獲取適當的成員ID- SELECT id FROM members WHERE username=... ,然后在更新查詢中使用它。

PS:不要忘記轉義您在查詢中放置的所有值。

嘗試這個:

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注入的侵害,有關sql注入及其預防方法的更多詳細信息,請參見SO上的這篇出色文章: 防止PHP注入SQL的最佳方法

$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注入的風險,有助於避免用戶名不唯一時出現問題等。

正確的查詢將是:

$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 .= ")";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM