[英]Adding to an existing value in mysql
我是 mysql 的新手。 我正在制作一個名為庫存的表,其中包含 4 列 - id、名稱、價格、數量。 現在,如果 name 已經存在,我要將數量添加到現有的其他人創建一個新行。 (名稱定義為 UNIQUE)。 我在 php 上做這個。 $name, $quant,$price 包含值。
mysqli_query($con,"INSERT INTO inventory (Name, Quantity, Price) VALUES ($name,$quant,$price)
ON DUPLICATE KEY UPDATE
Quantity = Quantity + $quant ,
Price = VALUES(Price) ");
我無法理解為什么它不能正常工作。 有時 Quantity 會正確更新,但大多數情況下不會。 休息一切正常。 只是數量的問題。 謝謝你的幫助
編輯:我在 phpmyadmin 上定義了表。 以下是詳細信息:
1 id int(11) AUTO_INCREMENT PRIMARY
2 名稱 varchar(15) latin1_swedish_ci UNIQUE
3 數量整數(11)
4 價格整數(11)
編輯:這是一個緩存問題。 解決了
是否從您的 GET 變量正確更新了 $quant 變量? 另外請嘗試以下查詢,它應該與您嘗試執行的操作相同:
mysqli_query($con,"INSERT INTO inventory (Name, Quantity, Price) VALUES ($name,$quant,$price)
ON DUPLICATE KEY UPDATE
Quantity = Quantity + VALUES(Quantity),
Price = VALUES(Price) ");
使用 NULL 值延遲的問題我猜嘗試如下
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) ");
請記住,如果 $name、$quant 和 $price 來自用戶,則此方法會受到 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.