使用PHP PDO Query选择2列

nTu*_*ply 1 php mysql pdo

我是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);
Run Code Online (Sandbox Code Playgroud)

现在以下不起作用.请注意,当我添加$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);
Run Code Online (Sandbox Code Playgroud)

任何帮助是极大的赞赏.

bd8*_*808 6

从文档:

PDOStatement :: fetchColumn - 从结果集的下一行返回单个列

每次调用fetchColumn它都会前进到结果集的下一行.

尝试使用PDOStatement::fetch替代方法将整个行作为数组获取,然后从那里访问值.

$stmt->execute();
$row = $stmt->fetch();
$id = $row[0];
$password = $row[1];
Run Code Online (Sandbox Code Playgroud)