2011-05-24 96 views
0

我有一個工作的mysql_query:多的mysql_query不工作

mysql_query("update products set buyers = buyers+$qtd where id=$pid") or die (pgs_log("erro linha 70 >".mysql_error())); 

但後來我插入下面的查詢之後它,它只能執行第一個:

mysql_query("update products set pending = pending-$qtd where id=$pid") or die (pgs_log("erro linha 70 >".mysql_error())); 

所以,我是遺漏了什麼?

+0

嘗試'echo' SQL查詢到屏幕上看到$ pid'是否'$ qtd'和'仍然是工作,如果它不是,檢查你的'pgs_log'(不知道它是做什麼的)。是查詢提供和錯誤還是頁面剛加載但數據庫不變? – 2011-05-24 17:50:47

+0

你的代碼中有一個SQL注入漏洞,將'where id = $ pid')''改成'where id ='$ id'「)''。即把所有'$ vars'用單引號括起來,否則你的'mysql_real_escape_string'就沒用了。 – Johan 2011-05-28 21:05:36

回答

1

幾件事。首先你不需要兩個單獨的查詢。 MySQL可能會誤認爲你的價值是列名,因爲破折號:

mysql_query(" 
UPDATE `products` 
SET `buyers` = `buyers` + $qtd, 
`pending` = `pending` - $qtd 
WHERE `id` = $pid") or die (pgs_log("erro linha 70 >".mysql_error())); 
1
mysql_query("update `products` 
      set `pending` = `pending` - $qtd, 
       `buyers` = `buyers` + $qtd 
      where `id` = $pid") 
      or die (pgs_log("erro linha 70 >".mysql_error())); 
1

F你想仔細檢查您的更新實際更新的數據,那麼你應該調查mysql_affected_rows。你需要檢查你的舊值是否與你的新值不同,否則你將沒有受到影響的行,這是無用的檢查。

您不要在表格和列引用周圍使用正確的引號。這些應該與反勾包圍,並且可以合併,如下所示:

UPDATE 
    `products` 
SET 
    `pending` = `pending` - $qtd, 
    `buyers` = `buyers` + $qtd 
WHERE 
    `id` = $pid;