Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果PHP中不存在SQL记录,则插入SQL记录_Php_Mysql_Sql - Fatal编程技术网

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

如果PHP中不存在SQL记录,则插入SQL记录,php,mysql,sql,Php,Mysql,Sql,我已经为这个问题做了很多调查,其中一些似乎可以工作,但只是有点不合适 如果同一条记录不存在,我将尝试将该记录添加到数据库中 mysql_query("INSERT INTO pmd_OrderData (UserID, ProductID, ProductName, ProductPrice, ProductAmount) VALUES ($UserID, $ProductID, 'Test Product', 100, 1)"); 注意:此表中没有一个唯一的列,两列合在一起构成一个唯一的记录

我已经为这个问题做了很多调查,其中一些似乎可以工作,但只是有点不合适

如果同一条记录不存在,我将尝试将该记录添加到数据库中

mysql_query("INSERT INTO pmd_OrderData (UserID, ProductID, ProductName, ProductPrice, ProductAmount) VALUES ($UserID, $ProductID, 'Test Product', 100, 1)");
注意:此表中没有一个唯一的列,两列合在一起构成一个唯一的记录。e、 g:1个UserID可以有2个ProductID,1个ProductID可以同时有2个UserID

我试过这个:

--(INSERT QUERY)-- WHERE NOT EXISTS (SELECT * FROM pmd_OrderData WHERE UserID=$UserID AND ProductID=$ProductID
我见过关于“忽略”和“替换”的事情,但没有完全理解它们

现在,似乎大多数方法都使用唯一的主键来处理类似的事情,所以我不能100%确定它们中的任何一个对我来说会如何工作。我确信会有一些方法。

确保表中有唯一的键以防止重复。然后在查询中使用INSERT IGNORE INTO语法。这将使它们在存在重复项时自动失败。

确保表中有唯一的键以防止重复。然后在查询中使用INSERT IGNORE INTO语法。这将使它们在出现重复的情况下无声地失败。

试试看

在pmd_OrderData中插入用户ID、产品ID、产品名称、产品价格、产品金额 选择$UserID、$ProductID、'Test Product',100,1 从不存在的地方开始 从pmd_OrderData中选择1 其中UserID=$UserID和ProductID=$ProductID 试一试

在pmd_OrderData中插入用户ID、产品ID、产品名称、产品价格、产品金额 选择$UserID、$ProductID、'Test Product',100,1 从不存在的地方开始 从pmd_OrderData中选择1 其中UserID=$UserID和ProductID=$ProductID
我的首选方法是重复密钥更新:

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

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

与插入忽略相比,重复密钥更新的优点是后者将忽略所有错误。第一种方法直接处理复制,但仍会产生其他不相关的错误。

我首选的方法是在复制密钥更新时:

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

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

与插入忽略相比,重复密钥更新的优点是后者将忽略所有错误。第一种方法直接处理复制,但仍会产生其他不相关的错误。

尝试从插入更改为插入忽略插入尝试从插入更改为插入忽略插入感谢这一点,它工作得很好!我不接受这个答案,因为另一个答案给了我一个想法>:经过几次考验和磨难,这是对我最有效的答案!谢谢谢谢你,它工作得很好!我不接受这个答案,因为另一个答案给了我一个想法>:经过几次考验和磨难,这是对我最有效的答案!谢谢这些数据不会被存储很长时间,这是当前会话的临时内容,因此我认为不会有任何重复的数据导致错误,但谢谢@Mallander如果表中存在具有唯一键的重复项,则会出现错误。但是,这是防止任何重复条目的最简单方法,并且IGNORE关键字将确保至少不会向用户抛出错误。此数据不会被存储很长时间,这是当前会话的临时内容,因此我认为不会有任何导致错误的重复项,但谢谢@Mallander如果表中存在具有唯一键的重复项,则会出现错误。然而,这是防止任何重复条目的最简单方法,并且IGNORE关键字将确保至少不会向用户抛出错误。