<?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 запрос
в нем записаны sql запросы на создание и заполнение таблиц в бд
как сделать чтобы скрипт брал содержимое файла (файл весьма объемный) и делал запрос
если делать получение файла в строку
Код:
то выдает ошибку sql синтаксиса
кто знает как это безболезненно сделать:)
Далее, если текст файла написан в Windows, а файл открывается в *NIX, то велика вероятность, что он не понимает переносов строк (\n) и отсюда - тоже ошибка синтаксиса.
Цитата: mfender
А в файле ОДИН SQL-запрос?
Далее, если текст файла написан в Windows, а файл открывается в *NIX, то велика вероятность, что он не понимает переносов строк (\n) и отсюда - тоже ошибка синтаксиса.
Далее, если текст файла написан в Windows, а файл открывается в *NIX, то велика вероятность, что он не понимает переносов строк (\n) и отсюда - тоже ошибка синтаксиса.
в файле много запросов
строки комментарии из этого файла я отдельно написал скрипт чтоб он их убрал
функция file_get_contents по идее формирует весь файл в строку
но для sql запроса по идее неважно в строку он идет или с разбивкой на строки
ну и как он должен всё это выполнять? За один раз выполняется только один запрос. Один. А два и более запросов - ошибка синтаксиса.
Цитата: mfender
ну и как он должен всё это выполнять? За один раз выполняется только один запрос. Один. А два и более запросов - ошибка синтаксиса.
точно
не подумал об этом
тогда нужно делить на запросы
деление по строчкам не подойдет
можно наверно сделать сделать чтобы скрипт считывал до ;
делал запрос и так циклом до конца файла
только в текстах запроса могут встречаться ;
А почему бы и не сделать по одному запросу на строку? Тогда сможешь без проблем считать в массив ф-ей file() и по очереди их всех в цикле выполнить.
большинство запросов там однострочные
многострочные только на создание таблиц
кстати нет идейки хорошей как програмно "вытянуть" в строчку такие запросы
типа такого
Код:
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;
`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;
Имхо, тебе нужно написать скрипт который сформирует новый файл с разделением запросов по строкам. Различать ; в конце запроса от такого же символа в строковой переменной можно посчитав кол-во символов ' ДО этой ;. Если кол-во нечетное - строковая переменная. Если четное - конец запроса.
Цитата: 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);
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);
Цитата: shine
Различать ; в конце запроса от такого же символа в строковой переменной можно посчитав кол-во символов ' ДО этой ;. Если кол-во нечетное - строковая переменная. Если четное - конец запроса.
а откуда взялась такая четность/нечетность
Цитата: 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;
`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 кавычек.
Теперь веришь? ;)
оригинально - похоже ты прав
+1
попробую распределю по строчкам а потом file()'ом обработаю как массив запросов