mysql输出重定向_将MySQL输出内容写⼊(重定向到)⽂件对于数据库管理者来说,有时需要根据查询结果⽣成⼀系列⾮常相似但数量较多的sql命令,然后执⾏。为此,就需要将查询结果进⾏格式化,并输出到外部⽂件中。
对于select的查询结果,有个MySQL提供了直接的⽅法将查询结果写⼊到外部⽂件,其基本形式为
select * INTO OUTFILE 'file_name' from tab_list
我们还可以将查询结果进⾏⼀定的修饰,这要⽤到各种MySQL的内置函数,例如字符串函数和算数函数。
但是,有时我们的查询结果是⽤“show”命令得到的(例如show grants for 'user'@'host')时就不能使⽤上⾯的⽅法将查询结果输出到外部⽂件了。不过,根据MySQL说明书的提⽰,通过API访问MySQL的客户端程序,对于show命令返回的结果和select命令返回的结果都按相同的⽅式处理,因此我想到了通过PHP脚本来将⼀批show命令的结果写⼊外部⽂件。下⾯以⼀个具体问题来介绍我的处理⽅法。
在复制MySQL数据库时,如果希望将源MySQL Server的⽤户定义复制到⽬的Server时,就要获得每个定义⽤户的sql命令,然后执⾏这些sql命令,将命令产⽣的结果输出。下⾯是我写的 PHP脚本batch_sql_output.php,可以⽤直接在命令⾏执⾏
batch_sql_output.php > output,将输出重定向的数据库外的⽂档
$sqlhost="localhost";
// $database="mysql";
$sqluser="admin";
$sqlpass="adminpass";
$mysql_link = @mysql_connect($sqlhost,$sqluser,$sqlpass) or die("Could not connect data-server: " . mysql_error());
// mysql_select_db($database, $mysql_link) or die ('Can\'t use database "'.$database.'" : '.mysql_error());
$preSql = "SELECT concat(\"SHOW GRANTS FOR '\",User,\"'@'\",Host,\"'\") as statement FROM mysql.user ORDER BY User,Host";
//die( $preSql);php修改数据库内容
$preResult = mysql_query($preSql) or print($preSql."\npreSql failed: " . mysql_error()."\n");
while ($preResultLine = mysql_fetch_array($preResult, MYSQL_ASSOC)) {
$result = mysql_query($preResultLine['statement']) or print($preResultLine['statement']."\nQuery failed: " .
mysql_error()."\n");
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
foreach ($line as $col_value) {
echo $col_value."\n";
}
}
}
mysql_close($mysql_link);
>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论