Выполнить sql-запрос из sql-файла

Я хочу включить все таблицы из базы данных "shop" в mydatabase newshop . Я экспортирую эту базу данных «shop», и теперь она называется shop.sql . Есть ли способ выполнить весь запрос из этого файла, а не напрямую импортировать в базу данных newshop .

Я думаю, что вам нужно:

$ mysql -u $USERNAME -p < "$SQLFILENAME"

Где $ USERNAME – это имя пользователя mysql, например root а $ SQLFILENAME – это имя файла sql (в данном случае – « shop.sql »).

Вышеупомянутая команда попросит вас ввести пароль. Если вы не хотите делать это каждый раз, вы можете использовать «–password = $ PASSWORD», но будьте осторожны. Этот пароль может быть сохранен в истории, и он может оказаться в неправильной руке (если вы запустите его из PHP, это может быть не проблема).

ИЛИ вы можете использовать mysqli для его запуска.

 <?php $link = mysqli_connect("localhost", "my_user", "my_password", "world"); /* check connection */ if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } $query = file_get_contents("shop.sql"); /* execute multi query */ if (mysqli_multi_query($link, $query)) echo "Success"; else echo "Fail"; ?> 

Надеюсь это поможет.

Учитывая, что этот вопрос помечен PHP, вот как вы могли это сделать:

 mysql_query('USE newshop'); $queries = file('shop.sql'); while(list($i, $query) = each($queries)){ $query = trim($query, ';'); if(!empty($query) && $query != 'USE shop'){ @mysql_query($query); } } 

Убедитесь, что « USE shop » в выражении if соответствует любому синтаксису, используемому в файле SQL. Например, вам может потребоваться использовать USE 'shop' или USE schemaname.shop . Или, если там вообще нет команды USE , вы можете просто принять это условие.

 >>> mysql -u username -p >>> show databases; >>> use foo; >>> source /home/mannu/file.sql 

Я верю, что это то, что вы ищете? Или я неправильно понял?

Вот код, который может вас заинтересовать :

 <?php $dbhost = 'localhost'; $dbuser = 'root'; $dbpass = 'password'; $db = 'newshop'; $file =dirname(__FILE__).'\\'.'shop.sql'; $mySQLDir='"C:\\Program Files\\MySQL\\MySQL Server 5.1\\bin\\mysql.exe"'; if ($dbpass != '') { $cmd = $mySQLDir.' -h '.$dbhost.' --user='.$dbuser.' --password='.$dbpass.' < "'.$file.'"'; } else { $cmd = $mySQLDir.' -h '.$dbhost.' --user='.$dbuser.' < "'.$file.'"'; } echo $cmd; exec('"'.$cmd.'"',$out ,$retval); echo "\n"; echo ($retval); ?>