我对PHP和PDO还很陌生,我正在尝试建立一个简单的登录系统。现在,我试图从表中获取id和密码,以与用户输入的密码进行比较(我使用的是单向salt加密)。所以,现在的问题是,当我只使用$password = $stmt->fetchColumn(1)时,我的登录系统就工作了。现在,当我试图通过在id之前执行$id = $stmt->fetchColumn(0)来获取$password时,我无法再登录,并出现“错误的用户名/密码”错误。
现在我很确定我对fetchColumn做了一些错误的事情,但我无法找出原因。
下面是一个有效的代码片段:

$con = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
     //set how pdo will handle errors
$con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
     //this would be our query.
$sql = "SELECT id, password FROM user_admin WHERE email = :email";

      //prepare the statements
$stmt = $con->prepare( $sql );
     //give value to named parameter :email
$stmt->bindValue( "email", $this->email, PDO::PARAM_STR );
$stmt->execute();

$password = $stmt->fetchColumn(1);

现在下面的方法不起作用了。注意,当我添加$id时会发生这种情况:
$con = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
     //set how pdo will handle errors
$con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
     //this would be our query.
$sql = "SELECT id, password FROM user_admin WHERE email = :email";

      //prepare the statements
$stmt = $con->prepare( $sql );
     //give value to named parameter :email
$stmt->bindValue( "email", $this->email, PDO::PARAM_STR );
$stmt->execute();


$id = $stmt->fetchColumn(0); //That's the problem
$password = $stmt->fetchColumn(1);

任何帮助都非常感谢。

最佳答案

documentation开始:
PDOStatement::fetchColumn-从结果集的下一行返回一列
每次调用fetchColumn时,它都会前进到结果集的下一行。
尝试使用PDOStatement::fetch取而代之的是将整行作为数组获取,然后从中访问值。

$stmt->execute();
$row = $stmt->fetch();
$id = $row[0];
$password = $row[1];

09-25 19:12