PDO SQLite存在困难

时间:2012-03-13 20:15:46

标签: php sqlite pdo

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

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数据库。

3 个答案:

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

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