PDO SQLite трудности - PullRequest
0 голосов
/ 14 марта 2012

Может кто-нибудь сказать, пожалуйста, что не так с моим кодом.Когда я пытаюсь использовать функцию, я получаю:

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 2, когда мне была нужна база данных sqlite 3.

Ответы [ 3 ]

1 голос
/ 14 марта 2012

Я бы сказал, что у вас есть ошибка в вашем SQL-запросе, и строка

$dbh->query('...')

возвращает false - согласно manual .Тогда вы не можете вызвать метод setFetchMode для false.

Включить исключения, и это должно помочь вам:

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
1 голос
/ 14 марта 2012

По умолчанию PDO не возвращает PDOStatement из PDO :: query (), если запрос не выполнен.Вместо этого $IDq будет установлено в false, что не является объектом.

Что-то не так с вашим запросом или объектом PDO, и вы можете проверить это с помощью:

var_dump($dbh->errorInfo());

Кроме того, PHP рекомендует, чтобы, если вы собираетесь использовать PDO :: query (), вы защищали свой запрос следующим образом:

$IDq = $dbh->query("SELECT * FROM users_identify WHERE identifier = " . $dbh->quote($user_id));
0 голосов
/ 15 марта 2012

Я обнаружил, что проблема в том, что я использовал базу данных sqlite 2, когда мне требовалась база данных sqlite 3.Я предполагаю, что это было источником сообщения «файл зашифрован или не является базой данных».

var_dump($dbh->errorInfo());

Помог мне найти источник проблемы.:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...