2012-06-20 96 views
0

我有兩個名爲members和orders的表。更新外部列的MySQL查詢

成員表 Members columns

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

這是我如何把它:

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

我被困在WHERE查詢部分。

+2

你嘗試MySQL的文檔:[更新](HTTP: //dev.mysql.com/doc/refman/5.0/en/update.html)和[Join](http://dev.mysql.com/doc/refman/5.0/en/join.html) –

+1

我當然希望你在將這些變量應用到SQL,Bobby Tables之前將這些變量消毒... – ty812

回答

5

如果您需要更新基礎上用戶名的順序,你需要JOIN成員表:

​​

或替代,第一獲取相應的成員ID - SELECT id FROM members WHERE username=...,然後在更新使用查詢。

PS:不要忘記逃避查詢中的所有值。

+1

我可能不是最聰明的,但如何逃避價值?爲什麼?無論如何感謝您的查詢。非常感激。 – AimanB

+2

使用'mysql_real_escape_string($ _ POST ['something'])'來防止mysql注入 –

+1

[SQL Injection](http://en.wikipedia.org/wiki/SQL_Injection)是一種攻擊技術,用於將任意數據庫查詢注入到受害者數據庫服務器通過一個網站連接到它... – poncha

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注入,看到這個優秀的帖子在這裏SO有關SQL注入,如何防止更多的細節它:Best way to prevent SQL Injection in PHP

+0

謝謝你的信息 – AimanB

+0

@amnbhrm,不客氣。 –

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

+0

好吧,非常感謝那些新知識:) – AimanB

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