Доброго времени суток, есть задача: залить в базу SQl-команды из файла bot.sql Есть проблема: PHP: public function install_file($file){ $filen = fopen($file,'r'); $query = fread($filen, filesize($file)); if($i = $this->mysqli->multi_query($query)){ return $i; } else return false; } - не работает
Что это означает? Выдается какая-то ошибка? Выдаются пустые данные? Что подразумевается под "не работает"? И что вы пытаетесь скормить базе?
При исполнении функции (всей) приходит false, кормлю дамп базы без лишнего, без комментариев только: Код (Text): CREATE TABLE IF NOT EXISTS INSERT INTO там так-же присутствует Код (Text): `call` int(255) NOT NULL, если это чем-то поможет... --- Добавлено --- если залить это в разделе SQL в phpMyAdmin все работает
Хм...а вы смотрели, что у вас в переменной $query? Может у вас файл не читается, или читается криво, или еще что? И да, код: PHP: if($i = $this->mysqli->multi_query($query)){ return $i; } else return false; Смело можно заменить на: PHP: return $this->mysqli->multi_query($query);
а давай те ка в начало файлика добавим вот такие 3 строчки PHP: ini_set('error_reporting', E_ALL); ini_set('display_errors', 1); ini_set('display_startup_errors', 1); может нотис какой будет =) а в конечик функции прикрутим вот такое .. PHP: if( $this->mysqli->errno ) { die( '<h1>ERROR</h1> Query #' . ( $i + 1 ) . ' of <b>test_' . $id . '_data.sql</b>:<br /><br /> <pre>' . $query_array[ $i ] . '</pre><br /><br /> <span style="color:red;">' . $this->mysqli->error . '</span>' ); } переменные подгоните под себя - если надо -)
Спасибо PHP: 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 'CREATE TABLE `aq` ( `id` int(255) NOT NULL AUTO_INCREMENT, `a` varchar(2' at line 1
Можно еще вопрос чтобы не выходить в новую тему? как исправить ошибку? PHP: 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 'CREATE TABLE IF NOT EXISTS `aq` ( `id` int(255) NOT NULL AUTO_INCREMENT, ' at line 1 Если поможет PHP: Сервер: 127.0.0.1 via TCP/IP Тип сервера: MySQL Версия сервера: 5.6.15-log - MySQL Community Server (GPL) Версия протокола: 10 Пользователь: root@localhost Кодировка сервера: UTF-8 Unicode (utf8) PHP: CREATE TABLE IF NOT EXISTS `aq` ( `id` int(255) NOT NULL AUTO_INCREMENT, `a` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `q` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `attachment` text COLLATE utf8_unicode_ci, `sticker_id` int(200) DEFAULT NULL, `call` int(255) NOT NULL, `emoti` int(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1012 ;
в самом запросе проблемы нет ... он правильный и я не знаю .. предложить вот такое или нет - просто попробуй .. чем черт не шутит PHP: $this->mysqli->multi_query($mysqli->real_escape_string($query)) возможно он на апострофах падает ..
Чот ты жесть какую-то посоветовал. Это же срежет все кавычки до кучи, включая те, что являются частью синтаксиса. Тогда запрос 100% поломается.
есть другие идеи почему правильный запрос не выполняется ? как еще 1 вариант перед сном - заменить ` ' - апостроф на 1нарную кавычку .. PHP: $this->mysqli->multi_query( str_replace("`","'" $query)) в кавычках могу ошибиться - 1 глаз уже спит =)