我想将数据库“shop”中的所有表包含到mydatabase newshop
中。我导出了“shop”数据库,现在它被命名为shop.sql
。有没有办法从该文件执行整个查询,而不是直接导入数据库newshop
。
答案 0 :(得分:9)
我认为你需要的可能是:
$ 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";
?>
希望这有帮助。
答案 1 :(得分:1)
考虑到这个问题是用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
命令,你可以立即采取这个条件。
答案 2 :(得分:0)
>>> mysql -u username -p
>>> show databases;
>>> use foo;
>>> source /home/mannu/file.sql
我相信你正在寻找什么?还是我误解了?
答案 3 :(得分:0)
以下是您might be interested in的代码:
<?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);
?>