Я хочу включить все таблицы из базы данных "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); ?>