Как разделить SQL запросы?

shift_on_line

Новичок
Как разделить SQL запросы?

Как мне разделить sql запрос (и не один) полученный из TEXTAREA. Всмысле там запросов много и mysql_query($sql) будет выдовать ошибку.

Я пишу чтобы дамп базы можно было вставить из TEXTAREA. Вот что я пока написал:
PHP:
echo "<form method=post>";
echo "<table border=0 align=center>";
echo "<tr><td>Host of MySQL database:</td><td><input type=text name=host value=\"localhost\"></td></tr>";
echo "<tr><td>Name of MySQL database:</td><td><input type=text name=name value=\"\"></td></tr>";
echo "<tr><td>Login to MySQL database:</td><td><input type=text name=login value=\"\"></td></tr>";
echo "<tr><td>Password to MySQL database:</td><td><input type=password name=pass value=\"\"></td></tr>";
echo "<tr><td>SQL:</td><td><TEXTAREA NAME=sql ROWS=4 COLS=40></TEXTAREA></td></tr>";
echo "<tr><td colspan=2><input type=submit value=OK></td></tr>";
echo "</table>";
echo "</form>";

if (isset($login) && isset($name) && isset($host)){
    if ((!trim($name)=='') || (!trim($login)=='') || (!trim($host)=='')):
                   $connect=@mysql_connect($host,$login,$pass);
                   mysql_select_db("$name") or die("Can't connect to database ! ");
                   if (!empty($connect)){


// ВОТ здесь как мне разделить запросы sql??? =-=-=-=-=-=-=-=-=-=

                   $res=mysql_query($sql) or die(mysql_error());
                



                   };
    else:
         echo "<br>Empty DB name, or Login! Try again<br>";
    endif;
};

if ($res):
echo "Выполнено!<br><hr>
";
endif;
Если например запрос такой:

INSERT INTO system_anekdot VALUES ( 'Чукчи', ' В одном НИИ был проведен эксперимент: чукче сделали имплантацию
жопы. Через двенадцать часов жопа отторгла чукчу.

');
INSERT INTO system_anekdot VALUES ( 'Чукчи', ' - Как сделать чукчу счастливым на весь день?
- Написать на ленте бумаги с двух сторон: \"Смотри на обороте\"

');
INSERT INTO system_anekdot VALUES ( 'Чукчи', ' Чукча умер и завещал двум сыновьям похоронить его в океане. Оба сына
утонули, копая могилу.

');

Так и не придумал. HELP :eek:
 

whirlwind

TDD infected, paranoid
split(";", )
но вообще там немного сложнее. надо проверить что бы ; не был заквочен.
 

crocodile2u

http://vbolshov.org.ru
1) Сократи плз свой код, а? Там ведь ни строчки, нужной для решения, нету...
2) Посмотри, как это реализовано в phpMyAdmin
 

shift_on_line

Новичок
crocodile2u

2) Я смотрел так ничего понятного не нашёл... Мнеб этот кусочек..

whirlwind
А если ; гденибуть в запросе будет встречаться помимо конца запроса?
 

whirlwind

TDD infected, paranoid
дык я и говорю что может быть, тогда гораздо сложнее - надо будет следить за всеми '|" с самого начала строки.

ЗЫ. кста, погляди, по моему в mysql-евском дампе запросы разделены по строкам, а символ перевода строки заквочен. тогда проще.
 

shift_on_line

Новичок
Автор оригинала: whirlwind
ЗЫ. кста, погляди, по моему в mysql-евском дампе запросы разделены по строкам, а символ перевода строки заквочен. тогда проще.
Мне бы как сложнее, всмыле чтоб повсякому работало....

-~{}~ 27.09.05 17:37:

Вот нашёл как с файлом.

PHP:
         $fd=fopen("auktion.sql","r");
                           $str='';
                           while (!feof($fd)){
                                  $buffer=fgets($fd,50000);
                                  if (!strstr($buffer,"#")){
                                      $buffer=trim($buffer);
                                      $str=$str.$buffer;
                                      if (strpos($buffer,";")!=0){
                                          $res=mysql_query($str) or die(mysql_error());
                                          $str='';
                                          $buffer='';
                                      };
                                  };
                           };
                           fclose($fd);
Может кто как мне надо поможет переделать? :confused:
 

DiTHER

bang bang
если ; не в кавычках, то он является концом одного запроса. В других случаях он появлятся в середине не может. Только как параметр (т.е. в кавычках).

Отсюда и вывод: шаримся по запросу. Ищем семиколон. После чего пытаемся понять в кавычках он иль нет. Либо шарахаемся посимвольно в запросе считая кавычки. Если находим семиколон не в кавычках - все рубим.

А вообще прекрати людям парить мозги :)
The mysqli_multi_query() executes one or multiple queries which are concatenated by a semicolon.

Правда надо mysqli.. :)
 

Фанат

oncle terrible
Команда форума
shift_on_line
а по остальным предложениям у тебя вопросов не возникло?
вот и чудненько
 
Сверху