Php 在插入数据之前检查现有条目

Php 在插入数据之前检查现有条目,php,mysql,sql,insert,Php,Mysql,Sql,Insert,我正在尝试插入新的客户端,但前提是它们还不存在。我认为SQL语句有问题,但我也想给出PHP中的上下文: $sql = "INSERT INTO clients (`studentEmail`, `studentPassword`, `parentEmail`, `parentPassword`, `studentFirstName`, `studentLastName`, `studentPhone`, `parentFirstName`,

我正在尝试插入新的客户端,但前提是它们还不存在。我认为SQL语句有问题,但我也想给出PHP中的上下文:

   $sql = "INSERT INTO clients
        (`studentEmail`, `studentPassword`, `parentEmail`, `parentPassword`,
        `studentFirstName`, `studentLastName`, `studentPhone`, `parentFirstName`,
        `parentLastName`, `parentPhone`, `school`)
         VALUES ('$studentEmail', '$studentPassword', '$parentEmail',
        '$parentPassword', '$studentFirstName', '$studentLastName',
        '$studentPhone', '$parentFirstName', '$parentLastName', '$parentPhone', '$school')
        SELECT studentEmail
        FROM clients
        WHERE not exists (select * from clients where studentEmail == '"$studentEmail"')";

在insert语句中,
select
是互斥的。而不是:

insert table1 (col1, col2, col3, ...)
values (1, 2, 3, ...)
select col1
where  not exists (...)
尝试:


在insert语句中,
select
是互斥的。而不是:

insert table1 (col1, col2, col3, ...)
values (1, 2, 3, ...)
select col1
where  not exists (...)
尝试:


在插入数据之前,应检查电子邮件是否存在

$check = mysql_query("SELECT studentEmail FROM clients WHERE  studentEmail = '{$studentEmail}';");

if (mysql_num_rows($check) == 0) {
    // insert
}

在插入数据之前,应检查电子邮件是否存在

$check = mysql_query("SELECT studentEmail FROM clients WHERE  studentEmail = '{$studentEmail}';");

if (mysql_num_rows($check) == 0) {
    // insert
}

您可以使用
MERGE
语句:

merge into clients on (select 1 from clients where studentEmail = blabla)
when not matched then insert blabla

(合并语句语法将根据您的RDBMS而有所不同,因此请查看特定RDBMS实现的文档)

您可以使用
merge
语句:

merge into clients on (select 1 from clients where studentEmail = blabla)
when not matched then insert blabla


(合并语句语法将根据您的RDBMS而有所不同,因此请查看特定RDBMS实现的文档)

如果您在电子邮件字段上有唯一的索引,然后您可以只执行插入忽略…,与现有电子邮件对应的插入将被悄悄放弃。

如果您在电子邮件字段上有唯一索引,然后您可以执行插入忽略…,与现有电子邮件对应的插入将被悄悄地丢弃。

您是否遇到特定错误?您需要转义您的值。阅读。@Xeoncross:您不知道变量在本文档中使用之前是如何处理的query@MalcolmO我猜这是MySQL,这是你引用对象名的方式it@Xeoncross:“我逃避了这些价值观,我只是想删减帖子”,显然他逃避了这些价值观。甚至不要开始讨论no-no-yes和转义vs-prepared语句,这是离题的。您是否遇到特定错误?您需要转义您的值。阅读。@Xeoncross:您不知道变量在本文档中使用之前是如何处理的query@MalcolmO我猜这是MySQL,这是你引用对象名的方式it@Xeoncross:“我逃避了这些价值观,我只是想删减帖子”,显然他逃避了这些价值观。甚至不要开始讨论no-no-yes和转义vs-prepared语句,很遗憾mysql不支持
MERGE
。但它确实支持
REPLACE
INSERT。。。在重复密钥更新时
不幸的是,mysql不支持
MERGE
。但它确实支持
REPLACE
INSERT。。。在DUPLIcATE KEY UPDATE
上,我首先尝试了这个方法,因为php将很好地适应框架的其余部分。添加连接(.$studentEmail.)后,我得到错误“mysql_num_rows():提供的参数在…中不是有效的mysql结果资源”。有什么想法吗?此查询有效,但我仍然得到错误:mysql_num_rows():提供的参数。从studentEmail='{$studentEmail}'的客户端选择studentEmail;它说错误发生在这一行:“if(mysql_num_rows($check)==0{”这太奇怪了。
$check
是否返回查询结果?我很难找到答案,因为这是一个处理页面,所以即使我回显任何内容,屏幕上也不会显示任何内容。我的js指向此页面。你可以将浏览器指向php文件并查看输出,不是吗?:)我先尝试了这个方法,因为php我将很好地适应框架的其余部分。在添加连接(.$studentEmail.)之后,我得到了错误“mysql_num_rows():提供的参数不是有效的mysql result resource in…”有什么想法吗?这个查询可以工作,但我仍然得到错误:mysql_num_rows():提供的参数。选择studentEmail FROM clients,其中studentEmail='{$studentEmail}';它表示错误发生在此行:“if(mysql_num_rows($check)==0{”这太奇怪了。
$check
是否返回查询结果?我很难找到答案,因为这是一个处理页面,所以即使我回显任何内容,屏幕上也不会显示任何内容。我的js指向此页面。你可以将浏览器指向php文件并查看输出,不是吗?:)抱歉,我正在尝试php a先用方法。我正在尝试,但我一直遇到一个SQL错误…这是我的更新代码:插入客户端(
studentEmail
studentPassword
parentEmail
parentPassword
studentLastName
studentPhone
parentLastName
parentPhone
parentPhone
学校
)在不存在的位置选择“$studentEmail”、“$studentPassword”、“$parentEmail”、“$parentPassword”、“$studentFirstName”、“$studentPhone”、“$parentFirstName”、“$parentPhone”、“$school”(从studentEmail=“{$studentEmail}”的客户端选择studentEmail);即使我选择了另一种方法,我仍然想知道为什么我无法使其工作。数据库查询失败:您的SQL语法有错误;请检查与…对应的手册以使用“WHERE not exists”附近的(选择studentEmail from clients,其中studentEmail='robins'。在第7行…我使用的电子邮件地址是robins。br@gmail.comTry
insert-into
而不是
insert
?insert-into没有更改。我还尝试了:studentEmail='“$studentEmail”很抱歉耽搁了,我正在尝试php方法。我正在尝试,但我一直收到一个SQL错误…这是我的更新代码:插入客户端(
studentEmail
studentPassword
parentEmail
parentPassword
studentLastName
studentPhone
parentLastName
parentPhone
parentPhone
学校
)选择“$studentEmail”、“$studentPassword”、“$parentEmail”、“$parentPassword”、“$studentFirstName”、”$