Есть обычный файл sql с описанием таблиц - которые надо создать в базе MySQL, я могу конечно парсер простенький написать. Но вопервых лень, вовторых думаю есть встроенная функция для этого. Иль как передать в SQL запросе - ссылку на файл самому MySQL-ю ??? Она есть(функция) ? Иль может парсер у кого готовый ? Иль самому написать парсер ?
Нашел на github скрипт импорта,он там на mysql,переписал его под mysqli.Попробовал на файле table.sql со следующим содержанием: Код (Text): CREATE TABLE Books ( BookID SMALLINT NOT NULL PRIMARY KEY, BookTitle VARCHAR(60) NOT NULL, Copyright YEAR NOT NULL ) ENGINE=INNODB; Все отработало как надо.Вот собственно слегка отредактированный мной скрипт: PHP: <?php // Name of the file $filename = 'file.sql'; // MySQL host $mysql_host = 'localhost'; // MySQL username $mysql_username = 'root'; // MySQL password $mysql_password = ''; // Database name $mysql_database = 'test'; // Connect to MySQL server $link = mysqli_connect($mysql_host, $mysql_username, $mysql_password,$mysql_database); if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } // Temporary variable, used to store current query $templine = ''; // Read in entire file $lines = file($filename); // Loop through each line foreach ($lines as $line) { // Skip it if it's a comment if (substr($line, 0, 2) == '--' || $line == '') continue; // Add this line to the current segment $templine .= $line; // If it has a semicolon at the end, it's the end of the query if (substr(trim($line), -1, 1) == ';') { // Perform the query mysqli_query($link,$templine) or print('Error performing query \'<strong>' . $templine . '\': ' . mysqli_error() . '<br /><br />'); // Reset temp variable to empty $templine = ''; } } echo "Tables imported successfully"; ?>
Ну как бы да, но как бы можно часть этого кода на свалку выкинуть и просто делать одним запросом как я и сказал. А выкинуть, потому что в коде допущена глупейшая ошибка в работе с синтаксисом языка структурированных запросов, благодаря которой этот "парсер" с удовольствием убьет текст запроса, а штатный анализатор рсубд - нет.
Код (Text): mysql -u USER -p PASSWORD DATABASE < /file.sql А вот если пароль - ПУСТОЙ ? Парсер добирается до имени базы данных и воспринимает его как пароль... Вот тут затык уменя. Иль путь для SQL по другому виду указать, чем для PHP ??? Чисто взять файл в переменную через: file_get_content и отправить в базу запросом - через mysqli_query($db, $query) ? А ничего, что там сразу несколько таблиц прописано ?
И чего с того? "Парсер", предложенный сверху - тоже со всеми таблицами работает. Выполнение через консольный клиент - тоже со всеми таблицами работает. То просто не указываешь флаг пи. Это же очевидно.
Да - через file_get_content сработало нормально, благодарю за наколку. Необязательность очевидна для тех, кто уже знает - что данный параметр именно необязателен : - )))
Через file_get_content - как-то совершенно непонятно и нестабильно работает. То создаёт, то не создаёт. Ваще какой-то плавающий глюк. Сутки с ним бился - так и недогнал в чём причина. Через передачу в MySQL ссылки на файл - вообще не работает, наверное проблема в непонимании пути SQL-ем, который не совсем чётко совпадает с адресацией в PHP. А вот через парсер - работает стабильно и всегда.