php - 使用 PDO 从 MySQL 获取用户信息时出错

标签 php mysql authentication pdo

我为我正在从事的一个项目设计了一个授权系统。我能够从数据库中检索用户 ID,但是,我现在正在尝试获取该用户的用户名和电子邮件。 顺便说一句,我对 PHP 还很陌生。

我收到此错误:

SQLSTATE[HY093]: Invalid parameter number: parameter was not defined

我很困惑,因为

$stmt->execute() 

但是工作得很好

$stmt2->execute()

失败了。我确信问题很简单,但我无法弄清楚。这是用于获取信息的 PHP 代码。

$stmt = $dbh->prepare("SELECT nuewavedb_user_id, nuewavedb_username, nuewavedb_password FROM nuewavedb_users 
                WHERE nuewavedb_username = :nuewavedb_username AND nuewavedb_password = :nuewavedb_password");

    $stmt2 = $dbh->prepare("SELECT nuewavedb_fullname, nuewavedb_email FROM nuewavedb_users 
                WHERE nuewavedb_username = :nuewavedb_username AND nuewavedb_password = :nuewavedb_password");

    /*** bind the parameters ***/
    $stmt->bindParam(':nuewavedb_username', $nuewavedb_username, PDO::PARAM_STR);
    $stmt->bindParam(':nuewavedb_password', $nuewavedb_password, PDO::PARAM_STR, 40);

    $stmt2->bindParam(':nuewavedb_fullname', $nuewavedb_fullname, PDO::PARAM_STR);
    $stmt2->bindParam(':nuewavedb_email', $nuewavedb_email, PDO::PARAM_STR);

    /*** execute the prepared statement ***/
    $stmt->execute();
    $stmt2->execute();

    /*** check for a result ***/
    $user_id = $stmt->fetchColumn();

    $nuewavedb_fullname = $stmt2->fetchColumn();
    $nuewavedb_email = $stmt2->fetchColumn(1);

预先感谢您的帮助!

最佳答案

您应该以某种方式组合此查询,特别是如果它是同一个表,则无需读取两次

$stmt = $dbh->prepare("SELECT  
                               nuewavedb_user_id
                              ,nuewavedb_username
                              ,nuewavedb_password
                              ,nuewavedb_fullname
                              ,nuewavedb_email  
                       FROM nuewavedb_users 
                       WHERE nuewavedb_username = :nuewavedb_username AND
                             nuewavedb_password = :nuewavedb_password"
        );

然后正确执行并获取:

/*** bind the parameters ***/
$stmt->bindParam(':nuewavedb_username', $nuewavedb_username, PDO::PARAM_STR);
$stmt->bindParam(':nuewavedb_password', $nuewavedb_password, PDO::PARAM_STR, 40);

/*** execute the prepared statement ***/
$stmt->execute();

/*** fetch **/
$row = $stmt->fetch(PDO::FETCH_ASSOC);

$nuewavedb_fullname = $row['nuewavedb_fullname'];
$nuewavedb_email = $row['nuewavedb_email'];

关于php - 使用 PDO 从 MySQL 获取用户信息时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24636580/

相关文章:

javascript - 我的 HTTP over AJAX 有什么问题 (javascript)

php - 将 PHP 回显到 JS 变量会阻止脚本的其余部分执行吗?

php - 同步 PHP 和 MySQL 时区

mysql - 处理 mysql 数据库连接

php - 如何获取join中每个bank_id的最后记录

php - 检查数据库中创建的字符串,如果找到,则创建新字符串?

Django 休息框架 : Obtain auth token using email instead username

php - 对象数组获取特定对象并一起显示 PHP

php - 服务器不愿意执行。 PHP 中的 LDAP

mysql - 将纯密码转换为 Laravel 加密密码