我正在处理用户登录功能并遇到一个奇怪的问题“列数无效”。我谷歌它和许多人有同样的问题,他们的问题有点不同。
这是我的代码:
//this is a function inside user class. And function receives $user_data array
try{
$stmt = $this->db_connection->prepare("SELECT `id` FROM `aaa_users` WHERE (`user_email` = :user_email OR `user_name` = :user_email) AND `user_pass` = :user_pass");
$stmt->bindparam(':user_email', $user_data['email']);
$stmt->bindparam(':user_pass', $user_data['password']);
$stmt->execute();
$count = $stmt->rowCount();
} catch (PDOException $e){
echo $e->getMessage();
}
注册查询有效但会引发异常。我知道,会有一个小小的错误,但我已经花了一整天而无法弄明白。
非常感谢帮助!
答案 0 :(得分:2)
正如我在评论中提到的,PDO的仿真可能未在您的服务器上启用并使用相同的命名占位符(可能)导致此错误。
我分别将:user_mail
重命名为:user_email_1
和:user_email_2
。
$stmt = $this->db_connection->prepare("
SELECT `id` FROM `aaa_users`
WHERE (`user_email` = :user_email_1
OR `user_name` = :user_email_2)
AND `user_pass` = :user_pass
");
$stmt->bindparam(':user_email_1', $user_data['email']);
$stmt->bindparam(':user_email_2', $user_data['email']);
$stmt->bindparam(':user_pass', $user_data['password']);
$stmt->execute();
您可以在以下Q& A on Stack中了解更多相关信息:
里面的accepted answer提供了一个很好的解释。
注意:确保与$user_data['X_values']
相关的所有值都包含值。这表明它可能来自先前的查询,并且不知道它们的起源/值。
如果在测试过程中尚未使用任何错误,请按照以下链接使用错误检查:
确保所有列确实存在。您的数据库/表可能会出现区分大小写的可能性,因此请检查(字母大小写)。
另一件事;在过去,人们实际上不得不在Camel Case中使用bindParam
而不是bindparam
小写;这是一种可能性。