php - 为什么准备好的语句似乎没有(再次)绑定(bind)结果?

标签 php mysql authentication prepared-statement prepare

我是一个 PHP/MySQL 菜鸟。我正在进行身份验证,但我的代码不允许我访问正确的页面。这是我所拥有的:

    <?php
$username = null;
$password = null;

if ($_SERVER['REQUEST_METHOD'] == 'POST') {

    require_once('database.php');

    if(!empty($_POST["username"]) && !empty($_POST["password"])) {
        $username = $_POST["username"];
        $password = $_POST["password"];

        $query = $connection->prepare("SELECT user_id FROM users WHERE user_login = ? and user_password = PASSWORD(?)");
        $query->bind_param("ss", $username, $password);
        $query->execute();
        $query->bind_result($userid);
        $query->fetch();
        $query->close();

        if(!empty($userid)) {
// Stuff happens
} else {
// goes back to the login page

此时,$userid 似乎是空的,因为我不断返回登录页面。 database.php 只是连接,我已经确认这是可以的。我还确认表单正确提交了 $_POST["username"] 和 $_POST["password"],上面的代码创建了 $username 和 $password。我可以回显这些内容以查看正确的结果。数据库中的字段名称与 SQL 语句中的字段名称相匹配。但由于某种原因,$userid 为空。我读过其他帖子,但我几乎不明白我在做什么,更不用说其他人在做什么或解释什么了。我认为这是非常基本的东西,但它是什么?

最佳答案

为什么是 PASSWORD()?

    $query = $connection->prepare("SELECT user_id FROM users WHERE user_login = ? and user_password = ?");
    $query->bind_param("ss", $username, $password);
    $query->execute();
    $query->bind_result($userid);
    $query->fetch();
    $query->close();

关于php - 为什么准备好的语句似乎没有(再次)绑定(bind)结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24813551/

相关文章:

php - 将多个php代码条件转换为SQL命令

php - 仅在发布数据时显示 PDO BindParam

ruby-on-rails - 未定义的方法 `key?' 为 nil :NilClass

session - Laravel:在多个域上共享 session 数据

azure - Web 事件 ADF 中的参数化授权凭据

php - 比较mysql中varchar中存储的日期

php - 授予 PHP 文件夹中文件的 root 权限

php - 访问函数内动态创建的变量

php - 将 NULL 插入 DATE 或 tinyint 字段返回 00-00-0000/0

mysql - 握手过程中通讯失败。是否有服务器在本地主机 :3306? 上运行