2016-03-27 54 views
1

我是mysql的新手。我正在製作一個名爲庫存的表格,其中包含4列 - 編號,名稱,價格和數量。現在如果名稱已經存在,我要將數量添加到現有的數量,然後創建一個新的行。 (名稱被定義爲UNIQUE)。我正在做這個在PHP上。 $ name,$ quant,$ price包含這些值。添加到mysql中的現有值

mysqli_query($con,"INSERT INTO inventory (Name, Quantity, Price) VALUES ($name,$quant,$price) 
ON DUPLICATE KEY UPDATE 
    Quantity = Quantity + $quant , 
    Price = VALUES(Price) "); 

我無法理解爲什麼它不能正常工作。有時數量正確更新,但大部分時間沒有更新。休息一切正常工作。數量問題。感謝您的任何幫助

編輯:我定義了phpmyadmin上的表。下面是詳細信息:
1個ID INT(11)AUTO_INCREMENT PRIMARY

2名稱VARCHAR(15)latin1_swedish_ci UNIQUE
3數量INT(11)
4價INT(11)

編輯:這是一個緩存問題。解決

+0

請發送表格定義。 ('SHOW CREATE TABLE inventory') –

+0

在查詢中添加mysqli_error()函數以顯示錯誤。 – vitorio

+0

沒有錯誤。它只是不正確添加。 –

回答

1

是在$定量變量的存在從GET變量正確更新?還請嘗試以下查詢,它應該與您正在嘗試做的相同:

mysqli_query($con,"INSERT INTO inventory (Name, Quantity, Price) VALUES ($name,$quant,$price) 
ON DUPLICATE KEY UPDATE 
    Quantity = Quantity + VALUES(Quantity), 
    Price = VALUES(Price) "); 
0

問題與NULL值delaing我猜 嘗試如下

mysqli_query($con,"INSERT INTO inventory (Name, Quantity, Price) VALUES ($name,$quant,$price) 
ON DUPLICATE KEY UPDATE 
Quantity = IF((Quantity IS NULL), $quant,Quantity + $quant) , 
Price = VALUES(Price) "); 
+0

'Quantity = NULL'將不起作用。改用'Quantity IS NULL'。 –

+0

@PaulSpiegel完成老闆:) –

+0

問題不是NULL值。它正確拾取第一個條目。這只是隨機添加連續的條目。 –

0

請記住,如果$名稱,$定量和$價格都來自於用戶,則此方法受到SQL注入攻擊,不應該使用。直接採取任何用戶輸入而不先進行消毒是可能導致安全漏洞的嚴重錯誤。

我們現在擁有像PDO語句這樣的工具,它們可以準備SQL以輸入數據庫。請考慮使用類似的工具,在從用戶處獲取任何內容時準備好您的陳述。

用戶不被信任。注意值以下的結合:

$query = $mysqli->prepare(' 
    SELECT * FROM users 
    WHERE username = ? 
    AND email = ? 
    AND last_login > ?'); 

$query->bind_param('sss', 'test', $mail, time() - 3600); 
$query->execute(); 

上面的代碼是從這篇文章,它討論了使用直PDO與mysqli的版本之間的區別:

http://code.tutsplus.com/tutorials/pdo-vs-mysqli-which-should-you-use--net-24059