我是mysql的新手。我正在制作一个名为库存的表,其中有4列 - 名称,价格,数量。现在,如果名称已经存在,我将数量添加到现有的其他人创建一个新行。 (名称定义为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) ");
我无法理解为什么它无法正常工作。有时数量正确更新,大部分时间都没有。让一切都完美无缺。只是数量的问题。谢谢你的帮助
编辑:我在phpmyadmin上定义了表格。以下是详细信息:
1 id int(11)AUTO_INCREMENT PRIMARY
2名称varchar(15)latin1_swedish_ci UNIQUE
3数量int(11)
4价格int(11)
编辑:这是一个缓存问题。解决
答案 0 :(得分:1)
$ quant变量是否正确地从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) ");
答案 1 :(得分:0)
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) ");
答案 2 :(得分:0)
请记住,如果$ 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