如果PHP不存在,则插入SQL记录

时间:2014-06-25 13:10:27

标签: php mysql sql

我已经做了很多寻找这个问题,其中一些似乎可以工作,但只是有点偏。

如果相同的记录 已经存在,我正试图将此记录添加到数据库中。

mysql_query("INSERT INTO pmd_OrderData (UserID, ProductID, ProductName, ProductPrice, ProductAmount) VALUES ($UserID, $ProductID, 'Test Product', 100, 1)");

注意:此表中没有一个唯一列,2列一起构成唯一记录。例如:1个UserID可以有2个ProductID,1个ProductID一次可以有2个UserID。

我试过这个:

--(INSERT QUERY)-- WHERE NOT EXISTS (SELECT * FROM pmd_OrderData WHERE UserID=$UserID AND ProductID=$ProductID

我见过关于IGNOREREPLACE的内容,但没有完全理解它们。

现在,似乎大多数方法使用唯一(主)键来处理这样的事情,所以我不能100%确定它们中的任何一个对我有用(我确信会有一些东西会发生)。 / p>

3 个答案:

答案 0 :(得分:2)

确保表格中有unique个密钥以防止重复。然后在查询中使用语法INSERT IGNORE INTO。如果存在重复,这将使它们无声地失败。

答案 1 :(得分:1)

尝试

INSERT INTO pmd_OrderData (UserID, ProductID, ProductName, ProductPrice, ProductAmount) 
SELECT $UserID, $ProductID, 'Test Product', 100, 1
from dual where not exists
(
  select 1 FROM pmd_OrderData 
  WHERE UserID = $UserID AND ProductID = $ProductID
)

答案 2 :(得分:1)

我这样做的首选方法是on duplicate key update

INSERT INTO pmd_OrderData (UserID, ProductID, ProductName, ProductPrice, ProductAmount)
    VALUES ($UserID, $ProductID, 'Test Product', 100, 1)
    ON DUPLICATE KEY UPDATE UserId = VALUES(UserId);

但是,您需要一个唯一的密钥。我相信这个表的唯一键是UserId, ProductId,所以定义:

create unique index idx_pmd_OrderData_2 on pmd_OrderData(UserId, ProductId);

on duplicate key update优于insert ignore的优点是后者会忽略所有错误。第一个直接处理复制,但仍会产生其他无关的错误。