有人能告诉我我的代码出了什么问题吗。当我尝试使用该功能时,我得到:
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数据库。
我想说,您的SQL查询和行中有一个错误
$dbh->query('...')
返回false-根据手册。那么就不能在false
上调用方法setFetchMode。
启用抛出异常,它应该会对您有所帮助:
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
默认情况下,如果查询失败,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));
我发现问题是,当我需要sqlite 3数据库时,我正在使用sqlite 2数据库。我想这是"文件已加密或不是数据库"消息的来源。
var_dump($dbh->errorInfo());
帮助我找到问题的根源。:)