MySQL查询什么也没有返回

时间:2013-09-06 09:01:26

标签: php html mysql post

我在PHP中有这个功能:

function login($email, $password) {
    $email = sanitize_data($email);
    $password = sanitize_data($password);

    return (mysql_result(mysql_query("SELECT COUNT(`id`) FROM `registration` WHERE `email` = '$email' AND `password` = '$password'"),0) === 1) ? true : false;
}

我从条件语句中调用它,我确信它是正常的,因为如果我将true更改为false,那么事情就会继续进行。我很确定错误就在这里,我已经多次检查了我的变量而且我是MySQL的新手,所以我可能使用了错误的命令或其他东西。

如果查询在电子邮件和密码的组合中找到至少一行但每次都返回false,则该函数应该返回true。

这是sanitize_data()函数,即使我已经尝试摆脱它并且没有发生任何事情:

function sanitize_data ($data) {
    return mysql_real_escape_string($data);
}

其余的相关代码:

if (empty($_POST) === false) {
$email = $_POST['email'];
$password = $_POST['password'];

if(empty($email) === true || empty($password) === true) {
    $errors[] = 'You need to enter a username and a password';
} else if (email_exists($email) === false){
    $errors[] = 'Your email is not registered';
} else {
    if(login($email, $password) === false) {
        $errors[] = "That username/password combination doesn't exist";
    }

}

}

HTML:

<form action='' method='POST'>
    <input type='text' name='email' placeholder='E-Mail' class='form-email' />
    <input type='password' name='password' placeholder='Password' class='form-password' />
    <input type='submit' name='sbmit' class='form-submit' />
</form>

2 个答案:

答案 0 :(得分:1)

  1. “=== 1”正在检查一个不是至少一个,不是吗?

  2. 你试过sql语句f.e.在phpmyadmin或类似的东西?

  3. 您是否尝试将单行单独分开以使调试更容易?

  4. 打印出你生成的sql?

答案 1 :(得分:1)

您的SQL Query

没有问题

查看正常执行的SQL Query,请参阅SQL Fiddle

我认为严格比较===可能会破坏您的代码 尝试使用

更改代码
     mysql_result(mysql_query("SELECT COUNT(`id`) FROM `registration` WHERE `email` = '$email' AND `password` = '$password'"),0) == 1

并且还避免使用mysql_*它已被弃用且易受SQL注入攻击