Есть SQL-файл в котором содержится последовательность SQL-команд: создание таблиц, заполнение таблиц - инициализация таблиц. Как через PHP одним махом из исполнение?
чета типа такого: <?php $commands = file_get_contents($file); mysql_query($commands); ?> ну или циклом по строкам файла пройтись, если каждый запрос в отдельной строке.
Если в файле запросы следуют через ; , то можно считать файл в строку и разбить строку с explode, затем в цикле перебрать полученный массив, подставляя элементы как параметры в функцию mysq_query()
Да же, если и содержится символ ;, то если вы будете вставлять его через консоль - MySQL выдаст ошибку. Только через PHP, который как-то преобразует символ.
Ну тогда вы объясните. Я только, что через консоль попытался запихнуть в поле что-то типа такого 'sdadsasdas;asdsdsd'. Мускл выдал ошибку.
Конечно не вставляет, ёпт. Символ трактуется концом строки и далее — синтаксическая ошибка. Или вставлять его, обрамляя двойными кавычками, или — экранировать обратным слешем. Это же элементарно, оно настолько элементарно, что даже в комментариях не нуждается.
У меня очень часто. Не забываем, что в грамматике русского (и не только) языка ";" (точка с запятой) — это такой же знак препинания, который встречается хоть и довольно редко, но в больших текстах встречается не единожды. Например, очень часто при перечислении, или логическом разделении частей сложноподчиненного предложения. А если я пишу фрагмент РНР-кода для своих посетителей, где каждая инструкция разделяется точкой с запятой? Весьма бессмысленный вопрос о частоте употребления знака ";", поскольку он такой же равноправный, как и все остальные, и даже ещё более.
Кстати, по теме: Разделить чёткие инструкции, расположенные на разных строках или выдаваемых с помощью phpMyAdmin, можно простейшей регуляркой: PHP: <? $sql = file_get_contents("dump.sql"); // Делим инструкции $sql = preg_split('/;(?:\s)?$', $sql); // Ну и поехали foreach($sql as $query) { if(!(@mysql_query($query)) echo mysql_error(); } ?>
А если что-то типа этого имеется: Код (Text): CREATE TABLE `#__groups` ( `id` tinyint(3) unsigned NOT NULL default '0', `name` varchar(50) NOT NULL default '', PRIMARY KEY (`id`) ) TYPE=MyISAM CHARACTER SET `utf8`; # # Dumping data for table `#__groups` # INSERT INTO `#__groups` VALUES (0, 'Public; mublic; dublic'); INSERT INTO `#__groups` VALUES (1, 'Registered'); INSERT INTO `#__groups` VALUES (2, 'Special');