php - mysqli_num_rows 没有返回准确的结果

标签 php mysql

我有一个脚本应该采用电子邮件值的形式并查询数据库中的重复项。但是,无论我使用现有电子邮件(在数据库中)还是新电子邮件,我都会“成功”。

我的脚本是这样的:

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

    $email = $_POST['email'];

    // query the database for duplicates
    $query = 'SELECT email FROM user_info WHERE email = "$email"';
    $result = mysqli_query($db, $query);
    if(mysqli_num_rows($result)){
        echo "Email already taken";
    } else {
        echo "Success";
    }

显然 mysqli_num_rows 正在返回一些 类型的数据——或者根本没有。

如果我选择数据库中已存在的电子邮件,有谁理解为什么我不会得到返回的行?

编辑

    $('#email').blur( function() {
    if(!this.value){
        $('#jquery_msg').html("Email can't be empty");
    } else if (!filter.test(this.value)){
        $('#jquery_msg').html("Not a valid email");
    } else {
        var emailVal = $('#email').val();
        // make an ajax call
        $.ajax({
            url: 'validation.php',
            type: 'post',
            data: {'email': 'emailVal'},
            success: function(data, status) {
                $('#jquery_msg').html(data);
                //  console.log(data);
            },
            error: function(xhr, desc, err) {
                console.log(xhr);
                console.log("Details: " + desc + "\nError:" + err);
            }
        }); // end ajax call
    }
});

问题出在通过 Ajax 传递给 PHP 脚本的数据中。我认为 $('#email').val(); 的值实际上是 emailVal。咦.. 现在我需要解决如何将值正确传递到 Ajax 调用中。

谢谢大家的帮助。

最佳答案

这是错误的:

$query = 'SELECT email FROM user_info WHERE email = "$email"';

除了潜在的 sql 注入(inject)问题外,当您使用单引号时,变量不会被解析。

您应该改用准备好的语句:

$query = 'SELECT email FROM user_info WHERE email = ?';

然后你可以准备语句,绑定(bind)占位符并获取结果。检查manual获取更多信息。

一个快速的解决方案也是:

$query = 'SELECT email FROM user_info WHERE email = "'
            . mysqli_real_escape_string($db, $email) . '"';

编辑:要解决更多问题,您应该在数据库调用中添加错误处理。您可以让 mysqli 抛出异常,告诉您到底出了什么问题 - 如果有的话 - 通过将其添加到脚本的顶部:

ini_set('display_errors',1);
error_reporting(E_ALL | E_STRICT);
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

关于php - mysqli_num_rows 没有返回准确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27659834/

相关文章:

php - 我应该如何在我的 php 文件和 html 文件中包含我的 json 代码

mysql - 通过终端安装mysql

mysql - 根据列值添加列数据?

java - Spring Data JPA 保存一对一关系获取无法添加或更新子行 : a foreign key constraint fails

php - 如何实现像 www.example.com/username 这样的 url 以重定向到 www.example.com/user/profile.php?uid=10?

php - 如何在 foreach 中取消设置上一个数组元素

php - 如何在字符串中查找时间戳

php - 锁定 Mysql 表以供写入但允许读取

php - 使用 double 或 check in AND check 查询数据库

php - 显示比较 <select> 中两个表的现有和不存在的 ID