我是PHP和PDO的新手,我正在尝试创建一个简单的登录系统。现在,我正在尝试从我的表中获取id和密码,以便与用户输入的密码进行比较(我使用单向加密方式加盐)。所以,现在问题是,当我只做$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);
非常感谢任何帮助。
答案 0 :(得分:6)
PDOStatement :: fetchColumn - 从结果集的下一行返回单个列
每次调用fetchColumn
时,它都会前进到结果集的下一行。
尝试使用PDOStatement::fetch
取代整个行作为数组,然后从那里访问值。
$stmt->execute();
$row = $stmt->fetch();
$id = $row[0];
$password = $row[1];