Прелесть
Новичок
Господа, доброго времени суток. Давеча я заимел одну очень не приятную проблему. ответа на свой вопрос я не смог найти ни на этом форуме, не на прочих ресурсах, так что уповаю на ваш опыт и благоразумие.
В общем есть файл с 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, то запрос отлично проходит. Голову всю сломал уже почему именно из коде не срабатывает.
В общем есть файл с 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, то запрос отлично проходит. Голову всю сломал уже почему именно из коде не срабатывает.