我有两个名为members和orders的表。
会员表
订单表 在我的PHP代码中,我想基于members_id更新Orders表中的列,member_id是成员id表的外键。
这就是我说的:
$query = "UPDATE orders
SET package='$package', comments='$comments', refno='$refno', status='no'
WHERE members_id.username='$username'";
我被困在WHERE查询部分。
答案 0 :(得分:5)
如果您需要根据用户名更新订单,则需要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:不要忘记转义放在查询中的所有值。
答案 1 :(得分: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注入以及清理参数的任何其他方法,请参阅此处的优秀帖子,了解有关sql注入以及如何防止它的更多详细信息:Best way to prevent SQL Injection in PHP
答案 2 :(得分: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注入的风险,有助于避免在用户名不唯一时出现问题等等。
答案 3 :(得分: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 .= ")";