Ошибка подключения SQL от PHP после многих операцийPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Ошибка подключения SQL от PHP после многих операций

Сообщение Anonymous »

В настоящее время я создаю карту MBTiles и каждый раз добавляю информацию в свою базу данных.
Вот как я настроил свое соединение и выполнил действия во время цикла:

Код: Выделить всё

if ($pdo_mbtiles == null) {
echo "Opening new database connection".PHP_EOL;
$pdo_mbtiles = new PDO('sqlite:'.$filename,
'',
'',
array(
PDO::ATTR_PERSISTENT => true
)
);
$pdo_mbtiles->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$pdo_mbtiles->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}

$q = $pdo_mbtiles->prepare("INSERT INTO tiles (zoom_level, tile_column, tile_row,tile_data) VALUES (:zoom_level, :tile_column, :tile_rowTMS, :tile_data)");
$q->bindParam(':zoom_level', $zoom_level);
$q->bindParam(':tile_column', $tile_column);
$q->bindParam(':tile_rowTMS', $tile_rowTMS);
$q->bindParam(':tile_data', $tile_data, PDO::PARAM_LOB);
$q->execute();
После 1018 циклов (это число не меняется, сколько бы раз я ни пытался) я получаю следующее сообщение об ошибке:

Код: Выделить всё

SQLSTATE[HY000]: General error: 14 unable to open database file
Я проверил решение, написанное здесь:
Как предотвратить SQLITE SQLSTATE[HY000] [14]?
но отображаемое сообщение появляется только при первый раз цикла, поэтому я предполагаю, что соединение PDO не закрыто.

Я не нашел другой документации, относящейся к этому коду ошибки.
Что может пойти не так здесь?

Я пытался переместить команды подготовки и привязки в следующее состояние. Исключение не возникает, но сохраняется только первая плитка (или каждая плитка сохраняется поверх первой, не уверен):

Код: Выделить всё

if ($pdo_mbtiles == null) {
echo "Opening new database connection".PHP_EOL;
$pdo_mbtiles = new PDO('sqlite:'.$filename,
'',
'',
array(
PDO::ATTR_PERSISTENT => true
)
);
$pdo_mbtiles->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$pdo_mbtiles->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}

if ($q == null) {
$q = $pdo_mbtiles->prepare("INSERT INTO tiles (zoom_level, tile_column, tile_row,tile_data) VALUES (:zoom_level, :tile_column, :tile_rowTMS, :tile_data)");
$q->bindParam(':zoom_level', $zoom_level);
$q->bindParam(':tile_column', $tile_column);
$q->bindParam(':tile_rowTMS', $tile_rowTMS);
$q->bindParam(':tile_data', $tile_data, PDO::PARAM_LOB);
}
$q->execute();
Вот файлы во время генерации:
Изображение


И вот после возникновения исключения:
Изображение


Кроме того, когда возникает исключение, я делаю var_dump моих $pdo_mbtiles , и вот результат (точно такой же, как если бы я это сделал успешно):

Код: Выделить всё

object(PDO)#116 (0) {
}
Изменить: Все еще пытаясь решить эту проблему, я упростил код для создания файла MBTiles. Пока безуспешно, но вот образец, если кто-то хочет воспроизвести проблему. Вы можете скачать его с https://www.dropbox.com/s/33vqamc9tn4c3 ... g.zip?dl=0

Подробнее здесь: https://stackoverflow.com/questions/325 ... operations
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»