Php 在验证数据库中是否存在电子邮件时遇到问题

Php 在验证数据库中是否存在电子邮件时遇到问题,php,html,mysql,Php,Html,Mysql,我正在创建一个用户管理系统。我希望php脚本验证数据库中是否已经存在电子邮件地址。我可以更新用户数据。我可以验证电子邮件格式是否正确。脚本中不起作用的部分是检查电子邮件是否已在使用的部分。以下是不起作用的部分: if($_POST['email'] !=$_POST['email']) { $query_email = " SELECT from users where email = :email

我正在创建一个用户管理系统。我希望php脚本验证数据库中是否已经存在电子邮件地址。我可以更新用户数据。我可以验证电子邮件格式是否正确。脚本中不起作用的部分是检查电子邮件是否已在使用的部分。以下是不起作用的部分:

    if($_POST['email'] !=$_POST['email'])
    {

    $query_email = "
         SELECT
         from users
         where
         email = :email
    ";

    $query_goes = array(

    ':email' => $_POST['email']

    );
    try
    {

        $stmt = $db->prepare($query_email);
        $result = $stmt->execute($query_goes);
    }
    catch (PDOException $ex)
    {
        die("Failed to run query: " . $ex->getMessage());
    }
    $row = $stmt->fetch();
    if($row) 
    {
        die("Email already in use...");
    }

它抛出错误:哎哟,无法运行查询:SQLSTATE[23000]:完整性约束冲突:1062 du champ'tuskrr@fun.com“pour la clef”email“

就像juergen d在评论中说的那样,你的查询是错误的。 既然你只想检查邮件是否存在,我建议你去查看邮件栏而不是全部

$query_email = "
         SELECT <----- should be SELECT email
         from users
         where
         email = :email";

你需要选择一些东西。您可以执行
SELECT 1
,因为您只是在检查行是否存在,而不太关心返回物理数据

如果电子邮件不存在,就不会有结果,如果存在,就会有结果

$query_email = "
     SELECT
     1
     from users
     where
     email = :email
";
另一方面,这将如何执行:

if($\u POST['email']!=$\u POST['email'])

在什么情况下,变量不等于自身

我一开始就无法想象这种逻辑。您的错误是重复条目,这与您提供的任何代码无关。我的猜测是,它跳过了这段代码,您将直接进入插入


可能
如果(设置($\u POST['email'])
是您想要的吗?

您的查询是错误的。你需要选择一些东西。列或
*
我已修复了查询。我真不敢相信我错过了。如何避免重复条目?上面的代码我只想在管理员更改用户电子邮件时运行。如果没有任何更改,将跳过它。我将直接转到代码后面下一行的更新查询。a如何避免重复条目?我在!=电子邮件地址都是不同的。如果电子邮件被更改,它将不再等于它本身,则电子邮件将不同。例子:fun@fun.com变成fun1@fun.com它不再等于它自己,这是没有意义的,因为在任何时间点上都没有一个变量不等于它自己的实例<代码>$a=1;如果($a!=$a){/*这永远不会发生,这在物理上是不可能的*/}一个变量可以不等于另一个变量,但是x在数学和逻辑上总是等于x,你可以改变x是什么,但这并不意味着
x=x
相反,您应该将原始电子邮件存储为一个变量,比如说
$originalEmail
,然后比较
$\u POST['email']!=$原始邮件
$query_email = "
     SELECT
     1
     from users
     where
     email = :email
";