2016-03-27 58 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