为什么我的SQL查询总是返回相同的输出?

时间:2015-07-25 15:09:57

标签: php mysql sql web-services web

我创建了一个用户可以注册的页面。出于某种原因,应检查电子邮件是否已被使用的代码。不工作。

您可以假设与数据库的连接良好。因为用户可以在这篇文章被注释时进行注册。

        @ $db = new mysqli('localhost', 'USERAME', 'PASSWORD', 'DATABASE');

        if ($db->query("SELECT * FROM members WHERE email = '$email'")) {
          echo "<p id=\"signup_confirmed\">This e-mail is already in use, please try again with another e-mail.</p>";
          exit;
        }

编辑:

我使用了php本身附带的mysqli扩展。问题是,这曾经用于以前的版本。但由于某种原因,它已经不存在了。

我用来检查查询是否发送超过0行的代码也没有用。

3 个答案:

答案 0 :(得分:1)

if ($db->query("SELECT * FROM members WHERE email = '$email'")) {

是的,只要查询没有语法错误并且您连接到数据库,即使没有返回任何行,它也将始终返回TRUE。因此,你面临的问题。

您必须检查返回的行数,而不是查询是否成功,因此检查错误。

  1. 执行查询。
  2. 检查查询是否返回 any rows

答案 1 :(得分:0)

我个人会做的是将错误消息定义为变量,然后在HTML中回显变量:

PHP:

if ($db->query("SELECT * FROM members WHERE email = '$email';")) {
      $errMsg = 'Email is taken, please use another'
      exit;
    }

HTML:

<h1> <?php echo $errMsg; ?> </h1>

在这种情况下,您可以对每个可能的错误使用elseif,例如“密码太短”等等......只需设置你的$ errMsg ='x太短,必须在4-16个字符之间'等等。

根据您编写此解决方案的方式,这可能适用于您,也可能不适合您,但我发现这种风格至少在这种情况下对我有用。

另外,如果你将这个PHP脚本与HTML分开,你可以只包括这个验证脚本,只需将它放在你的html文档的顶部:

<?php require ' PATH TO SCRIPT '; ?>

答案 2 :(得分:-1)

试试这个

"SELECT COUNT(*) FROM members WHERE email = '$email'"