从sql文件执行sql查询

时间:2009-09-23 04:38:23

标签: php

我想将数据库“shop”中的所有表包含到mydatabase newshop中。我导出了“shop”数据库​​,现在它被命名为shop.sql。有没有办法从该文件执行整个查询,而不是直接导入数据库newshop

4 个答案:

答案 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);

?>