【问题标题】:Can someone tell me why this script return NULL instead of give me result?有人能告诉我为什么这个脚本返回 NULL 而不是给我结果吗?
【发布时间】:2012-11-24 04:19:07
【问题描述】:
$mysqli = mysqli_connect("localhost", "root", "pass", "test");

function check_login($mail,$pwd){   
    global  $mysqli;    
    if($stmt=  $mysqli->prepare('SELECT COUNT(*) FROM `users` WHERE mail = ? AND pwd = MD5(?)')){
        $stmt->bind_param("ss", $mail, $pwd);       
        $stmt->execute();
        $stmt->bind_result($count);
        $stmt->close();
        var_dump($count);
    }
    return ($count > 0 ? true : false);
}

check_login('test@gmail.com','pass');

我通过在stackoverflow上看到一些脚本编写了这个脚本。我尝试运行它,发现脚本执行后$count为NULL。

我想知道为什么这对我不起作用。我尝试在 Mysql 上运行相同的命令,它会显示结果。

谁来帮帮我..

【问题讨论】:

  • 我可以看到类似“命令不同步;您现在无法运行此命令”之类的内容
  • 参见php.net/manual/en/mysqli-stmt.bind-result.php - 在填充变量之前,您还需要发出 fetch() 调用。
  • @mario 谢谢亲爱的,这对我有用。

标签: php html


【解决方案1】:

mysqli::bind_result 需要在->execute 之后和->fetch 调用之前调用。 fetch() 不是可选的,因为(绑定结果)变量引用只是手动提取结果行的替代方法。

所以在你的代码中:

    $stmt->execute();
    $stmt->bind_result($count);
    $stmt->fetch();  // result array thrown away

【讨论】:

    【解决方案2】:

    首先,您不应该只是复制和粘贴代码,尤其是那些需要弄乱数据库的代码;了解代码试图实现的目标,然后编写你的代码。
    二、替换

    'SELECT COUNT(*) FROM `users` WHERE mail = ? AND pwd = MD5(?)'

    'SELECT COUNT(*) FROM `users` WHERE mail =? AND pwd =?'

    代码可能没有运行,因为您的密码以明文形式存储在数据库中。
    让我们知道这是否有效。

    【讨论】:

    • 感谢您的帮助,不,我已经运行了测试脚本来学习并使用 MD5 对密码进行哈希处理。它已经开始工作了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    • 2022-10-16
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多