За последние 24 часа нас посетил 230631 программист и 1735 роботов. Сейчас ищет 2491 программист ...

Выполнить sql файл из PHP

Тема в разделе "PHP для новичков", создана пользователем rar, 13 июл 2009.

  1. rar

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

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    Есть SQL-файл в котором содержится последовательность SQL-команд: создание таблиц, заполнение таблиц - инициализация таблиц. Как через PHP одним махом из исполнение?
     
  2. El Loco

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

    С нами с:
    26 дек 2008
    Сообщения:
    41
    Симпатии:
    0
    чета типа такого:

    <?php
    $commands = file_get_contents($file);
    mysql_query($commands);
    ?>

    ну или циклом по строкам файла пройтись, если каждый запрос в отдельной строке.
     
  3. rar

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

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    Думаю, это не лучший вариант.
     
  4. alexy

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

    С нами с:
    4 янв 2009
    Сообщения:
    74
    Симпатии:
    0
    Адрес:
    Россия, г. Белгород
    Если в файле запросы следуют через ; , то можно считать файл в строку и разбить строку с explode, затем в цикле перебрать полученный массив, подставляя элементы как параметры в функцию mysq_query()
     
  5. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    А если вставляемые данные содержат символ ";" ? :)
     
  6. alexy

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

    С нами с:
    4 янв 2009
    Сообщения:
    74
    Симпатии:
    0
    Адрес:
    Россия, г. Белгород
    хм...действительно, что-то не подумал..
     
  7. rar

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

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    Да же, если и содержится символ ;, то если вы будете вставлять его через консоль - MySQL выдаст ошибку. Только через PHP, который как-то преобразует символ.
     
  8. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Полнейший бред, вы хоть думайте, что говорит.
    Если сами не знаете, то не надо путать новичка хоть.
     
  9. rar

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

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    Ну тогда вы объясните.
    Я только, что через консоль попытался запихнуть в поле что-то типа такого 'sdadsasdas;asdsdsd'. Мускл выдал ошибку.
     
  10. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
  11. rar

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

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    Ошибся. А вот символ ' - не вставляет, выдает ошибку.
     
  12. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Конечно не вставляет, ёпт.
    Символ трактуется концом строки и далее — синтаксическая ошибка.
    Или вставлять его, обрамляя двойными кавычками, или — экранировать обратным слешем.
    Это же элементарно, оно настолько элементарно, что даже в комментариях не нуждается.
     
  13. rar

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

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    Все-таки, возвращаясь к вопросу темы, что можно еще предложить.
     
  14. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    И насколько часто в реальных базах такое случается?
     
  15. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    я чего-то не понял, поцчему mysql_query/mysqli_multiquery не подходит?
     
  16. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    У меня очень часто.
    Не забываем, что в грамматике русского (и не только) языка ";" (точка с запятой) — это такой же знак препинания, который встречается хоть и довольно редко, но в больших текстах встречается не единожды.
    Например, очень часто при перечислении, или логическом разделении частей сложноподчиненного предложения.
    А если я пишу фрагмент РНР-кода для своих посетителей, где каждая инструкция разделяется точкой с запятой?
    Весьма бессмысленный вопрос о частоте употребления знака ";", поскольку он такой же равноправный, как и все остальные, и даже ещё более.
     
  17. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Кстати, по теме:
    Разделить чёткие инструкции, расположенные на разных строках или выдаваемых с помощью phpMyAdmin, можно простейшей регуляркой:

    PHP:
    1. <?
    2.  
    3. $sql = file_get_contents("dump.sql");
    4.  
    5. // Делим инструкции
    6. $sql = preg_split('/;(?:\s)?$', $sql);
    7.  
    8. // Ну и поехали
    9. foreach($sql as $query) {
    10.     if(!(@mysql_query($query))
    11.         echo mysql_error();
    12. }
    13.  
    14. ?>
     
  18. rar

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

    С нами с:
    9 дек 2008
    Сообщения:
    206
    Симпатии:
    0
    Адрес:
    Москва
    А если что-то типа этого имеется:
    Код (Text):
    1. CREATE TABLE `#__groups` (
    2.   `id` tinyint(3) unsigned NOT NULL default '0',
    3.   `name` varchar(50) NOT NULL default '',
    4.   PRIMARY KEY  (`id`)
    5. ) TYPE=MyISAM CHARACTER SET `utf8`;
    6.  
    7. #
    8. # Dumping data for table `#__groups`
    9. #
    10.  
    11. INSERT INTO `#__groups` VALUES (0, 'Public; mublic; dublic');
    12. INSERT INTO `#__groups` VALUES (1, 'Registered');
    13. INSERT INTO `#__groups` VALUES (2, 'Special');