Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Как выполнить импорт дампа базы через PDO?
цитата
28/04/10 в 20:42
 alexxxus
Добрый день.

Подскажите, плиз, какой командой можно выполнить многострочный набор SQL-команд?
Например

$dump = "CREATE database .......;
INSERT INTO database ......;
UPDATE database ....;"

то есть загрузить сразу дамп базы?

Спасибо!
цитата
28/04/10 в 21:19
 leroy_17
мож тебе это надо http://php.net/manual/en/mysqli.multi-query.php
цитата
28/04/10 в 21:33
 alexxxus
Не совсем. Нужно именно через PDO-запрос.

Через PDO пробывал так:
$dbh->exec($dump) и $dbh->query($dump)

но выполняются только для первой строчки из дампа (до первого появления ";"). Вот не знаю как сделать, чтобы весь дамп исполнить в одном запросе.
цитата
28/04/10 в 22:17
 FXIX
Все правильно, вставляется одна строка, символ (;) - окончание SQL-запроса. Файл прочитай в массив строк. Потом в цикле прогони INSERTы.
Если у тебя дамп структура+данные то shell> mysql database < script.sql попробуй. Если просто набор инсертов для таблиц то LOAD DATA LOCAL INFILE 'file_name.txt' INTO TABLE tbl_name
цитата
28/04/10 в 22:25
 alexxxus
База SQLite, поэтому смысл в импорте дампа целиком в том, что ускоряется
время загрузки в разы. Построчно это очооченньь долго.

Если есть знатоки PDO, то хотелось бы точно знать - возможно ли импортировать все разом?
цитата
28/04/10 в 22:28
 ibiz
ступил, через PDO так не получится
цитата
29/04/10 в 00:30
 Dr.Syshalt
alexxxus писал:
База SQLite, поэтому смысл в импорте дампа целиком в том, что ускоряется
время загрузки в разы. Построчно это очооченньь долго.
Если есть знатоки PDO, то хотелось бы точно знать - возможно ли импортировать все разом?


Тут не от PDO зависит, а от базы. Если у SQLite нету возможности выполнять несколько запросов в одном вызове API (что я подозреваю, имеет место быть), то нифига ты не добьешься. И, более того, даже если где-то у тебя и получится сделать через PDO подобный трюк, то ничего не выигрываешь - поскольку вызов PDO все равно будет транслироваться в вызовы SQLite API в конце концов, так что где-то по пути твой дамп все равно разобъется на отдельные запросы. Это у MySQL есть возможность в mysql_real_query() (начиная с 5.0) такие штуки проделывать и запихивать в один вызов несколько запросов, а тут, я так думаю - облом. И вообще это нестандартно, и в унифицированных интерфейсах типа PDO такие вещи проделывать просто идеологически неправильно.
цитата
29/04/10 в 00:36
 Stek
http://www.sqlitemanager.org/ тебе в помощь.
А так сам разбивай скриптом на запросы и выполняй по порядку.
цитата
29/04/10 в 05:18
 alexxxus
Главная цель - это сократить количество открытий-закрытий файлов для
записи. Это очень жутко тормозит набивание базы.
цитата
29/04/10 в 07:36
 alexxxus
ступил


Эта страница в полной версии