Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

sql запрос

622
31 декабря 2006 года
nilbog
507 / / 19.12.2006
есть текстовый файл предположим x1.txt
в нем записаны sql запросы на создание и заполнение таблиц в бд
как сделать чтобы скрипт брал содержимое файла (файл весьма объемный) и делал запрос
если делать получение файла в строку
 
Код:
<?php
$link=mysql_connect("localhost","root","blabla");
mysql_select_db("test");
$sq=file_get_contents("x1.txt");

$result = mysql_query($sq)
 or die("Invalid query: " . mysql_error());
 
?>

то выдает ошибку sql синтаксиса
кто знает как это безболезненно сделать:)
8
31 декабря 2006 года
mfender
3.5K / / 15.06.2005
А в файле ОДИН SQL-запрос?

Далее, если текст файла написан в Windows, а файл открывается в *NIX, то велика вероятность, что он не понимает переносов строк (\n) и отсюда - тоже ошибка синтаксиса.
622
31 декабря 2006 года
nilbog
507 / / 19.12.2006
Цитата: mfender
А в файле ОДИН SQL-запрос?

Далее, если текст файла написан в Windows, а файл открывается в *NIX, то велика вероятность, что он не понимает переносов строк (\n) и отсюда - тоже ошибка синтаксиса.


в файле много запросов
строки комментарии из этого файла я отдельно написал скрипт чтоб он их убрал
функция file_get_contents по идее формирует весь файл в строку
но для sql запроса по идее неважно в строку он идет или с разбивкой на строки

8
31 декабря 2006 года
mfender
3.5K / / 15.06.2005
ну и как он должен всё это выполнять? За один раз выполняется только один запрос. Один. А два и более запросов - ошибка синтаксиса.
622
31 декабря 2006 года
nilbog
507 / / 19.12.2006
Цитата: mfender
ну и как он должен всё это выполнять? За один раз выполняется только один запрос. Один. А два и более запросов - ошибка синтаксиса.


точно
не подумал об этом
тогда нужно делить на запросы
деление по строчкам не подойдет
можно наверно сделать сделать чтобы скрипт считывал до ;
делал запрос и так циклом до конца файла
только в текстах запроса могут встречаться ;

8
31 декабря 2006 года
mfender
3.5K / / 15.06.2005
А почему бы и не сделать по одному запросу на строку? Тогда сможешь без проблем считать в массив ф-ей file() и по очереди их всех в цикле выполнить.
622
31 декабря 2006 года
nilbog
507 / / 19.12.2006
ну можно конечно
большинство запросов там однострочные
многострочные только на создание таблиц
кстати нет идейки хорошей как програмно "вытянуть" в строчку такие запросы
типа такого
 
Код:
CREATE TABLE `blabla` (
  `id` int(10) unsigned NOT NULL default '0',
  `id2` smallint(5) unsigned NOT NULL default '0',
  `mask` smallint(5) unsigned NOT NULL default '0',
  PRIMARY KEY  (`id`,`id2`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
337
31 декабря 2006 года
shine
719 / / 09.06.2006
nilbog, в любом случае твой большой файл со скриптом нужно сначала приводить к человеческому виду (один запрос на строке).

Имхо, тебе нужно написать скрипт который сформирует новый файл с разделением запросов по строкам. Различать ; в конце запроса от такого же символа в строковой переменной можно посчитав кол-во символов ' ДО этой ;. Если кол-во нечетное - строковая переменная. Если четное - конец запроса.
8
31 декабря 2006 года
mfender
3.5K / / 15.06.2005
Цитата: nilbog
как програмно "вытянуть" в строчку такие запросы



Код:
$sql = "
CREATE TABLE `blabla` (
  `id` int(10) unsigned NOT NULL default '0',
  `id2` smallint(5) unsigned NOT NULL default '0',
  `mask` smallint(5) unsigned NOT NULL default '0',
  PRIMARY KEY  (`id`,`id2`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
"
;
$sql = preg_replace("/\n/", " ", $sql);
$sql = preg_replace("/\x20{2,}/", " ", $sql);
$sql = preg_replace("/;/", "", $sql);
622
31 декабря 2006 года
nilbog
507 / / 19.12.2006
Цитата: shine
Различать ; в конце запроса от такого же символа в строковой переменной можно посчитав кол-во символов ' ДО этой ;. Если кол-во нечетное - строковая переменная. Если четное - конец запроса.


а откуда взялась такая четность/нечетность

337
31 декабря 2006 года
shine
719 / / 09.06.2006
Цитата: nilbog
а откуда взялась такая четность/нечетность



Это результат долгих и мучительных размышлений. :) А ты можешь просто взять и посчитать в следущем примере ' по тому правилу, что я тебе описал:

 
Код:
CREATE TABLE `bla;bla` (
  `id` int(10) unsigned NOT NULL default '0',
  `id2` smallint(5) unsigned NOT NULL default '0',
  `ma;sk` smallint(5) unsigned NOT NULL default '0',
  PRIMARY KEY  (`id`,`id2`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


Перед первым символом 1 кавычка. Перед вторым символом 11 кавычек. Перед третьим символом 18 кавычек.
Теперь веришь? ;)
622
31 декабря 2006 года
nilbog
507 / / 19.12.2006
действительно
оригинально - похоже ты прав
+1
попробую распределю по строчкам а потом file()'ом обработаю как массив запросов
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог