有人可以告诉我我的代码有什么问题。当我尝试使用该功能时,我得到:
Fatal error: Call to a member function setFetchMode() on a non-object in ...
使用:
if (!$IDq) { print_r($dbh->errorInfo()); }
给了我: 文件已加密或不是数据库
我多年来一直在搞乱它,但似乎无法让它发挥作用。
function user_registered($user_id){
$dbh = new PDO("sqlite:datastore/userids.db");
$IDq = $dbh->query("SELECT * FROM users_identify WHERE identifier = '$user_id'");
$IDq->setFetchMode(PDO::FETCH_ASSOC);
$IDf = $IDq->fetch();
if($IDf['id']){
return $IDf['id'];
}else{
return 0;
}
}
感谢。
编辑:啊,谢谢你的帮助。我发现了问题,当我需要sqlite 3数据库时,我正在使用sqlite 2数据库。答案 0 :(得分:1)
默认情况下,如果查询失败,PDO将不会从PDO :: query()返回PDOStatement。相反,$IDq
将设置为false
,这是一个非对象。
您的查询或PDO对象出了问题,您可以通过以下方式检查:
var_dump($dbh->errorInfo());
另外,PHP建议如果你打算使用PDO :: query()来保护你的查询:
$IDq = $dbh->query("SELECT * FROM users_identify WHERE identifier = " . $dbh->quote($user_id));
答案 1 :(得分:1)
我会说,你的SQL查询和行
中有错误$dbh->query('...')
返回false - 根据manual。然后你不能在false
上调用方法setFetchMode。
启用抛出异常,它可以帮助您:
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
答案 2 :(得分:0)
我发现了问题,当我需要一个sqlite 3数据库时,我正在使用sqlite 2数据库。我想那个文件的来源是加密的,或者不是数据库'信息。
var_dump($dbh->errorInfo());
帮助我找到问题的根源。 :)