[英]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.