Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > [MySQL] Мульти-запрос


Автор: CyClon 27.2.2007, 17:26
Хочу узнать, поддерживает ли PHP возможность делать несколько запросов, например так:

Код
<?php

$query = "SELECT * FROM table1;
          SELECT * FROM table2;
          SELECT * FROM table3;
          UPDATE table1 SET name=123 WHERE id=1";

$result = mysql_query($result);

$array = mysql_fetch_array($result);

?>


Или хотя бы без вывода результата...

Код
<?php

$query = "SELECT * FROM table1;
          SELECT * FROM table2;
          SELECT * FROM table3;
          UPDATE table1 SET name=123 WHERE id=1";

$result = mysql_query($result);

echo ($result) ? 'true' : 'false';

?>


Если такой топик уже есть  - пинайте безжалостно.

Добавлено @ 17:29 
Если так как я написал работать не будет, есть ли альтернативные способы? Нужно выполнить запросы из файла db.sql, например.

Автор: mishaSL 27.2.2007, 17:37
Цитата(CyClon @  27.2.2007,  17:26 Найти цитируемый пост)
Хочу узнать, поддерживает ли PHP возможность делать несколько запросов, например так:


Насколько я помню нет.


Цитата(CyClon @  27.2.2007,  17:26 Найти цитируемый пост)
Нужно выполнить запросы из файла db.sql


Если вручную, то можно через консоль без проблем.

Автор: Бонифаций 27.2.2007, 18:26
зависит от версии mysql . Если до 5.0 то мультизапросы не поддерживаются вообще. 

Начиная с 5.0 можно посылать несколько запросов в одной строке разделенными ; но только если соединился используя специяльную опцию CLIENT_MULTI_STATEMENTS в флагах соединения. Как это делается в php - хрен его знает.  Что то вроде

$link = mysql_connect("localhost", "root", "xxxx",CLIENT_MULTI_STATEMENTS) 

Автор: CyClon 27.2.2007, 18:32
Тяжело... smile Спасибо за помощь. Может кто-то скажет иначе и докажет на примере? smile

Автор: Mal Hack 27.2.2007, 20:10
CyClon, тебе выше все написали, неужели сложно проверить самому?

Автор: romantik 27.2.2007, 20:11
а может считать файл в переменную, потом в массив explode(';',$variable) и в цикл?  smile 

Автор: mishaSL 27.2.2007, 20:29
CyClon, я делал так из консоли вручную для заливки большого дампа:
Код

mysql -uUSER -pPASSWORD  DB_NAME< "/home/.../public_html/db.sql"


Если на сервере разрешено, можешь попробывать из PHP.

Автор: CyClon 27.2.2007, 21:03
Да, сенк за помощь, из консоли то ясно конечно, но интересует из скрипта %) Вот еще нашел инфу по UNION, буду разбираться smile

Автор: Бонифаций 27.2.2007, 21:34
Цитата(romantik @  27.2.2007,  20:11 Найти цитируемый пост)
а может считать файл в переменную, потом в массив explode(';',$variable) и в цикл?  smile  


А если ; попадется в строковой константе в селекте например?

select concat(fld,";") from tbl


Автор: Рыжий 27.2.2007, 22:51
Цитата(romantik @  27.2.2007,  20:11 Найти цитируемый пост)
а может считать файл в переменную, потом в массив explode(';',$variable) и в цикл?  smile

Сколько тогда запросов к БД будет? около 20-50 (к примеру), это не критично для сервера?

Автор: CyClon 28.2.2007, 14:34
Цитата
около 20-50 (к примеру), это не критично для сервера?


Конечно нет, та же PHP-Nuke бажная делала до 200 запросов на каждой странице и ее как-то терпели...

Вообще, такое использовать нужно только в скриптах, запускаемых админом... Например установка CMS.

Автор: romantik 28.2.2007, 15:28
у меня на сервере в секунду выполняеться около 250 запросов smile и ниче-так...
насчет константы - можна условие написать  smile 

Автор: mishaSL 28.2.2007, 16:02
Если используешь PHP5, то можешь воспользоваться:
http://ru.php.net/manual/ru/function.mysqli-multi-query.php

Добавлено @ 16:11 
Работает бысто и удобно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)