0

我有两个名为成员和订单的表。

成员表 会员栏目

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 查询部分。

4

4 回答 4

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:不要忘记转义您在查询中放置的所有值。

于 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 注入,有关 sql 注入以及如何防止它的更多详细信息,请参阅 SO 中的这篇出色的帖子:Best way to prevent SQL Injection in PHP

于 2012-06-20T14:59:32.710 回答
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 回答
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 回答