PHP&;MySQL-在不存在的地方插入
我需要插入数据,除非该行中存在两个字段。下面是我当前的查询,它添加了所有有效的内容PHP&;MySQL-在不存在的地方插入,php,mysql,Php,Mysql,我需要插入数据,除非该行中存在两个字段。下面是我当前的查询,它添加了所有有效的内容 $sql = "INSERT INTO contact_sync_status (ghl_contact_email, ghl_contact_data, result, wp_user_id) VALUES ('$source->email', '$payload', 'success', $user->id)"; 因此,我尝试了以下方法使其有条件: $sql = "
$sql = "INSERT INTO contact_sync_status (ghl_contact_email, ghl_contact_data, result, wp_user_id) VALUES ('$source->email', '$payload', 'success', $user->id)";
因此,我尝试了以下方法使其有条件:
$sql = "INSERT INTO contact_sync_status (ghl_contact_email, ghl_contact_data, result, wp_user_id) VALUES ('$source->email', '$payload', 'success', $user->id) WHERE NOT EXISTS (SELECT 1 FROM contact_sync_status WHERE ghl_contact_email = '$source->email' AND wp_user_id = $user->id)";
但我收到了一个SQL语法错误,因为WHERE NOT EXISTS似乎不能与INSERT一起使用。我还尝试在数据库中使用唯一索引,但这不是一个选项。为了使用
WHERE
子句,必须使用SELECT
查询数据,而不是值
$sql = "INSERT INTO contact_sync_status (ghl_contact_email, ghl_contact_data, result, wp_user_id)
SELECT '$source->email', '$payload', 'success', $user->id
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM contact_sync_status WHERE ghl_contact_email = '$source->email' AND wp_user_id = $user->id)";
但是最好在(ghl\u联系人\u电子邮件,wp\u用户id)
上添加一个唯一的索引,然后使用插入忽略
。了解。首先执行完全独立的查询以查看它是否存在将起作用。为什么唯一索引不是一个选项?这是一种公认的(实际上是唯一有效的)机制,用于执行您正在尝试执行的操作。您不能通过先选择来保证重复预防。@GrumpyCrouton您是否有机会提供一个如何执行此操作的示例?第一个是select,但是我该如何使用它呢?现在将它作为一个准备好的语句呈现:我不想每次回答SQL问题时都这样做。就我而言,上面的评论已经足够了。我同意,我是在开玩笑,而不是认真。我不得不考虑如何用上面的这种查询正确地做占位符,开始自我怀疑,做了一些测试,现在感觉好多了。