通过外部列更新MySQL查询

时间:2012-06-20 14:53:55

标签: php mysql sql

我有两个名为members和orders的表。

会员表 Members columns

订单表 Orders columns 在我的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查询部分。

4 个答案:

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