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问题时都这样做。就我而言,上面的评论已经足够了。我同意,我是在开玩笑,而不是认真。我不得不考虑如何用上面的这种查询正确地做占位符,开始自我怀疑,做了一些测试,现在感觉好多了。