Невозможно выполнить запрос SQLite для файла

У меня странная проблема, когда я не могу выполнить самый простой запрос к файлу базы данных SQLite, пока код работает с другим файлом. Нет ошибки при создании нового экземпляра PDO. Разрешение достаточно только для чтения (644).

try
{
$dbh = new PDO("sqlite:$db");
}
catch(PDOException $e)
{
echo $e->getMessage();
echo "Database not loaded successfully. ";
die();
}

Но когда я бегу:

$sth = $dbh->prepare('select * from message');
$result = $sth->execute();

или же

$result = $dbh->query('select * from message');

оба возвращаются FALSE,

Выдает ошибку: «Неустранимая ошибка: необработанное исключение« PDOException »с сообщением« SQLSTATE [HY000]: общая ошибка: 14 невозможно открыть файл базы данных »» в $dbh->prepare линия.

Опять же, приведенный выше код работает нормально на другом файле базы данных.

Другая информация: я Можно просто откройте проблемный файл в MesaSQLite (программа просмотра файлов SQLite на Mac).

Я что-то пропустил?

0

Решение

Я использую что-то вроде этого. Не знаю, поможет ли это

<?php

try {
// create a new instance of a PDO connection
$db = new PDO("sqlsrv:Server=localhost;Database=myDatabase", $username, $password);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$sql='SELECT * FROM message';

$stmt = $db->prepare($sql);
$stmt->execute();

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach($rows as $row) {
echo "<pre>";var_dump($row);echo"</pre>";
}
}
catch(PDOException $e) {
// if the connection fails, display an error message
echo 'ERROR: ' . $e->getMessage();
$errmsg = $e->getMessage();
error_log('$errmsg-> '.$errmsg);
}
0

Другие решения

Есть веская причина, по которой они возвращают false, когда это происходит, вы должны проверить ошибки и исправить их:

  • Проверьте ошибку при подключении.
  • Проверьте ошибку при подготовке.
  • Проверьте ошибку при выполнении

С помощью prepare():

try
{
$dbh = new PDO("sqlite:$db");
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sth = $dbh->prepare('select * from message');

if(!$sth) {
echo "prepare failed() :\n";
print_r($dbh->errorInfo());
die();
}

$success = $sth->execute();

if(!$success) {
echo "execute failed() :\n";
print_r($dbh->errorInfo());
die();
}

$result = $sth->fetchAll();
var_dump($result);
}
catch(PDOException $e)
{
echo "PDO Exception caught: ";
echo $e->getMessage();
die();
}

С помощью query():

try
{
$dbh = new PDO("sqlite:$db");
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sth = $dbh->query('select * from message');

if(!$sth) {
echo "query() failed :\n";
print_r($dbh->errorInfo());
die();
}

$result = $sth->fetchAll();

if($result) {
var_dump($result);
}else{
echo "No result !";
}}
catch(PDOException $e)
{
echo "PDO Exception caught: ";
echo $e->getMessage();
die();
}

Чтобы установить режим ошибки при создании соединения:

$dbh = new PDO("sqlite:$db", null, null,
array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
0

По вопросам рекламы [email protected]