За последние 24 часа нас посетили 34013 программистов и 1819 роботов. Сейчас ищут 772 программиста ...

PHP multi query

Тема в разделе "PHP и базы данных", создана пользователем KING_PHP, 26 ноя 2016.

  1. KING_PHP

    KING_PHP Активный пользователь

    С нами с:
    18 апр 2015
    Сообщения:
    154
    Симпатии:
    3
    Адрес:
    Волгоград
    Доброго времени суток, есть задача: залить в базу SQl-команды из файла bot.sql
    Есть проблема:
    PHP:
    1. public function install_file($file){
    2.       $filen = fopen($file,'r');
    3.       $query = fread($filen, filesize($file));
    4.       if($i = $this->mysqli->multi_query($query)){
    5.       return $i;
    6.       } else return false;
    7.     }
    - не работает
     
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Что это означает? Выдается какая-то ошибка? Выдаются пустые данные? Что подразумевается под "не работает"? И что вы пытаетесь скормить базе?
     
  3. KING_PHP

    KING_PHP Активный пользователь

    С нами с:
    18 апр 2015
    Сообщения:
    154
    Симпатии:
    3
    Адрес:
    Волгоград
    При исполнении функции (всей) приходит false, кормлю дамп базы без лишнего, без комментариев только:
    Код (Text):
    1. CREATE TABLE IF NOT EXISTS
    2. INSERT INTO
    там так-же присутствует
    Код (Text):
    1. `call` int(255) NOT NULL,
    если это чем-то поможет...
    --- Добавлено ---
    если залить это в разделе SQL в phpMyAdmin все работает
     
  4. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Хм...а вы смотрели, что у вас в переменной $query? Может у вас файл не читается, или читается криво, или еще что?

    И да, код:
    PHP:
    1. if($i = $this->mysqli->multi_query($query)){
    2.       return $i;
    3.       } else return false;
    Смело можно заменить на:
    PHP:
    1. return $this->mysqli->multi_query($query);
     
  5. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    а давай те ка в начало файлика добавим вот такие 3 строчки

    PHP:
    1. ini_set('error_reporting', E_ALL);
    2. ini_set('display_errors', 1);
    3. ini_set('display_startup_errors', 1);
    может нотис какой будет =)

    а в конечик функции прикрутим вот такое ..
    PHP:
    1. if( $this->mysqli->errno )
    2. {
    3.     die(
    4.        '<h1>ERROR</h1>
    5.        Query #' . ( $i + 1 ) . ' of <b>test_' . $id . '_data.sql</b>:<br /><br />
    6.        <pre>' . $query_array[ $i ] . '</pre><br /><br />
    7.        <span style="color:red;">' . $this->mysqli->error . '</span>'
    8.    );
    9. }
    переменные подгоните под себя - если надо -)
     
  6. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Советы Славки тоже рекомендую учесть. Особенно второй.
     
  7. KING_PHP

    KING_PHP Активный пользователь

    С нами с:
    18 апр 2015
    Сообщения:
    154
    Симпатии:
    3
    Адрес:
    Волгоград
    Спасибо
    PHP:
    1. 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
     
  8. KING_PHP

    KING_PHP Активный пользователь

    С нами с:
    18 апр 2015
    Сообщения:
    154
    Симпатии:
    3
    Адрес:
    Волгоград
    Можно еще вопрос чтобы не выходить в новую тему? как исправить ошибку?
    PHP:
    1. 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:
    1. Сервер: 127.0.0.1 via TCP/IP
    2. Тип сервера: MySQL
    3. Версия сервера: 5.6.15-log - MySQL Community Server (GPL)
    4. Версия протокола: 10
    5. Пользователь: root@localhost
    6. Кодировка сервера: UTF-8 Unicode (utf8)
    PHP:
    1. CREATE TABLE IF NOT EXISTS `aq` (
    2.   `id` int(255) NOT NULL AUTO_INCREMENT,
    3.   `a` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
    4.   `q` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
    5.   `attachment` text COLLATE utf8_unicode_ci,
    6.   `sticker_id` int(200) DEFAULT NULL,
    7.   `call` int(255) NOT NULL,
    8.   `emoti` int(255) NOT NULL,
    9.   PRIMARY KEY (`id`)
    10. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1012 ;
     
  9. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    в самом запросе проблемы нет ...
    он правильный
    и я не знаю .. предложить вот такое или нет - просто попробуй .. чем черт не шутит

    PHP:
    1. $this->mysqli->multi_query($mysqli->real_escape_string($query))
    возможно он на апострофах падает ..
     
  10. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Чот ты жесть какую-то посоветовал. Это же срежет все кавычки до кучи, включая те, что являются частью синтаксиса. Тогда запрос 100% поломается.
     
  11. Slavka

    Slavka Активный пользователь

    С нами с:
    1 окт 2013
    Сообщения:
    722
    Симпатии:
    41
    есть другие идеи почему правильный запрос не выполняется ? как еще 1 вариант перед сном - заменить ` ' - апостроф на 1нарную кавычку ..
    PHP:
    1. $this->mysqli->multi_query( str_replace("`","'" $query))
    в кавычках могу ошибиться - 1 глаз уже спит =)
     
  12. KING_PHP

    KING_PHP Активный пользователь

    С нами с:
    18 апр 2015
    Сообщения:
    154
    Симпатии:
    3
    Адрес:
    Волгоград
    Это не вариант только по-тому что у каждой из них разное назначение