Ошибка синтаксиса MySQL при запросе взятом из файла.

Прелесть

Новичок
Господа, доброго времени суток. Давеча я заимел одну очень не приятную проблему. ответа на свой вопрос я не смог найти ни на этом форуме, не на прочих ресурсах, так что уповаю на ваш опыт и благоразумие.

В общем есть файл с SQL кодом, который нужно импортировать в базу, создав её перед этим и создав под неё пользователя MySQL. Но вот незадача, сервер при отправки запроса выдает ошибку синтаксиса там, где её вроде как и нет. Сейчас я приведу конкретные примеры.

Вот код, который все это дело делает:
[рhp]
$createDB = ''; $createDBuser = '';
//Подготавливаю базу данных
if ($_REQUEST['create_db'])
$createDB = 'CREATE DATABASE `'.$_REQUEST['mysql_db'].'` /*!40100 DEFAULT CHARACTER SET cp1251 */;';
if ($_REQUEST['create_db_user'])
$createDBuser = 'GRANT ALL PRIVILEGES ON `' . $_REQUEST['mysql_user'] . '`.* TO \'' . $_REQUEST['mysql_db'] . '\'@\'' . $_REQUEST['mysql_host'] . '\' IDENTIFIED BY \'' . $_REQUEST['mysql_pass'] . '\';';
$useDB = 'USE `'.$_REQUEST['mysql_db'].'`;';
$crmSchema = file_get_contents('schema.sql');
$crmSchema = preg_replace('/^\s*\-\-.+$/m', '', $crmSchema);
$crmSchema = str_replace('--', '', $crmSchema);
$sql = $createDB.' '.$createDBuser.' '.$useDB.' '.$crmSchema;
mysqli_query($con, $sql);
echo mysqli_error($con).'<br/><br/><br/>';
print_r($sql);
[/рhp]

Вот начало запроса MySQL (весь не буду приводить, т.к. он достаточно большой):

[sql]
-- phpMyAdmin SQL Dump
-- Время создания: Сен 28 2015 г., 21:50
-- Версия сервера: 5.5.41-0+wheezy1-log
-- Версия PHP: 5.6.4-4ubuntu6.2
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
--
-- --------------------------------------------------------
--
-- Структура таблицы `application`
--
CREATE TABLE IF NOT EXISTS `application` (.......
[/sql]

В таком виде импортировать конечно нельзя, поэтому я немного его обрабатываю в коде и после обработки получается следующее:

[sql]
CREATE DATABASE `crm_test` /*!40100 DEFAULT CHARACTER SET cp1251 */; GRANT ALL PRIVILEGES ON `crm_test`.* TO 'crm_test'@'localhost' IDENTIFIED BY 'crm_test'; USE `crm_test`; SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; CREATE TABLE IF NOT EXISTS `application` (.....
[/sql]

Ошибка, которая выдаются MySQL:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GRANT ALL PRIVILEGES ON `crm_test`.* TO 'test'@'localhost' IDENTIFIED BY 'cr' at line 1.

В общем ошибку вызывает любой код после создания БД. Если удалить проблемный запрос, то аналогичная ошибка выпадает на начало следующего запроса. Если взять вывод обработанного кода и вставить в PhpMyAdmin, то запрос отлично проходит. Голову всю сломал уже почему именно из коде не срабатывает.
 

AnrDaemon

Продвинутый новичок
Ваша ошибка в том, что вы используете неверные инструменты для выполнения задачи.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
А кто вам сказал, что драйвер через который вы пытаетесь это провернуть понимает мультизапросы, разделенные ; ?
 

Прелесть

Новичок
Ну так будьте добры, подскажите верные инструменты.
Я очень рад, что Вы озабочены моими навыками в PDO и я неприменимо им займусь, но пока я наберу достаточно знаний, возможно, пройдет не мало времени, а задачу нужно решить сейчас, так что, если Вас не затруднит, не могли бы Вы поведать в чем моя ошибка в конкретно этом случае? Или хотя бы указать куда мне копать, иначе Ваш совет звучит на попытка помочь закопанному по шею в землю человеку, положив рядом с ним лопату.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
@AnrDaemon, проблема именно там, где я сказал, не раньше)

Ну это не считать если, что парень фигачил из гаубицы по мокрицам.
 

Прелесть

Новичок
Ну это не считать если, что парень фигачил из гаубицы по мокрицам.
Я не очень опытен. Не могли бы Вы объяснить почему так считаете? И предыдущее Ваше сообщение я видел. Благодарю, за ответ. Далее я просто общался с другим ответчиком. ))
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Ты что-то делаешь не так, потому как у тебя не должно быть такой необходимости - парсить выдачу от phpMyAdmin.

Первая твоя задача - описать то, что ты делаешь и почему, а не просить исправить заведомо неверный подход, что ты привел.
Давай, начинай, мы все внимаем.
 

Прелесть

Новичок
Давай, начинай, мы все внимаем.
Хорошо. Задача у меня следующая. Есть один программный продукт (какой не важно в рамках задачи), для которого мне нужно написать что-то типа инсталятора. Который бы собрал необходимые данные посредством формы, прописал нужный config.php в этом продукте и подготовил для него базу данных. Из "дано" у меня только эта задача, сам проект и phpMyAdmin выгрузка его пустой базы. Все. Именно поэтому я использую phpMyAdmin выгрузку. Хотя я загружал её руками и делал вывод дампа через mysqldump. Впрочем, результата это не поменяло, что позволило мне сделать вывод, что выгрузка phpMyAdmin тут ни при чем. С первой частью, касаемой config.php все вроде бы нормально, а вот с импортом структуры базы такая вот беда.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Структуры ныне делается миграциями, а потом сидится базовыми данными. Последнее ты можешь заменить на ручной импорт куска данных.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
вряд ли ТС поймет слово "сидится". здесь используется ввиду понятие "база наполняется заранее подготовленными данными"
 

Прелесть

Новичок
Структуры ныне делается миграциями, а потом сидится базовыми данными. Последнее ты можешь заменить на ручной импорт куска данных.
Благодарю за совет. Теперь хотя бы знаю куда смотреть.
вряд ли ТС поймет слово "сидится". здесь используется ввиду понятие "база наполняется заранее подготовленными данными"
Я понял что значит "сидится", благодарю.
 
Сверху