PDO SQLite difficulties


PDO SQLite difficulties

有人能告诉我我的代码出了什么问题吗。当我尝试使用该功能时,我得到:

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());

帮助我找到问题的根源。:)