LINUX.ORG.RU

Много запросов за один подход

 , ,


0

1

ЛОР, как средствами ПэХоПэ исполнить много запросов за один подход / загнать дамп?

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

Иметься в веду что-то в этом роде:

...
mysql_query('
  INSERT INTO data (val) VALUSE ("Test");
  INSERT INTO data (val) VALUSE ("Test 2");
  DROP TABLE dont_need;
');
...
★★★★★

Последнее исправление: sphericalhorse (всего исправлений: 2)

тащемта заливка дампа сводится к выполнению всех этих инсёртов, так что все ок, делай много запросов

redixin ★★★★
()

Чяднт?

...
        mysql_query(
                'SET AUTOCOMMIT=0;'
                . 'START TRANSACTION;'
                . file_get_contents('files/query.log.tmp')
                . 'COMMIT;'
        );
...

Вроде и ошибки не выдает, но изменений не происходит.

sphericalhorse ★★★★★
() автор топика
Ответ на: комментарий от theos

Но тогда тоже придется делать каждый запрос через отдельный mysql_query.

Так а можно ли сделать что-то типа?

mysql_query('
  BEGIN;
  INSERT INTO tab1 (val) VALUES ('Test 1');
  INSERT INTO tab1 (val) VALUES ('Test 2');
  INSERT INTO tab1 (val) VALUES ('Test 3');
  END;
');
sphericalhorse ★★★★★
() автор топика

В своё время много и упорно занимался этим вопросом. С учетом технологической целесообразности - НИКАК. Хотя конкретно для инсёртов существует синтаксис вида

INSERT INTO data (val) VALUES('test1'),('test2'),...,('testN');

Лишь бы позволяла max_allowed_packet в настройках мускуля.

Хотя если хочешь, можешь попробовать потрахаться с http://php.net/manual/ru/mysqli.multi-query.php

Или написать свой парсер запросов.

r_asian ★☆☆
()
Ответ на: комментарий от sphericalhorse

Надо было все писать на Java EE

anonymous
()

Никак. Для борьбы с распространёнными SQL-иньекциями множественные запросы в одном mysql_query в PHP уже давно запрещены.

А чем не нравится серия mysql_query? Оверхед практически нулевой и в современных условиях неизмеримый.

KRoN73 ★★★★★
()

google:mysql load data from file

ZuBB ★★★★★
()
Ответ на: комментарий от sphericalhorse

Использовать mysqli

$stmt = $mysql->prepare('INSERT INTO tab1 (val) VALUES (?)');
$stmt->bind('s', $value);

$mysqli->autocommit(false);

for ($i = 0; $i < 10; $i++)
{
    $value = 'Test ' . $i;
    $stmt->execute();
}

$mysqli->commit();
RR
()

Когда то давно заметил одну штуку. Дамп БД в текстовом файле формата SQL, сделанный штатными средствами резервного копирования содержит запросы вставки такого вида:

INSERT INTO data (val) VALUES ("Test"), ("Test 2")

Как ни странно это помогало подсократить время вставки больших объемов данных. Единственная проблема, нельзя собрать в кучу все сразу. Размер запроса имеет ограничение.

valich ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.