zoukankan      html  css  js  c++  java
  • 将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,可以用php.exe直接在命令行执行php.exe batch_sql_output.php > output,将输出重定向的数据库外的文档

    <?php
    $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);
    $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);
    ?>

  • 相关阅读:
    怎么查看京东店铺的品牌ID
    PPT编辑的时候很卡,放映的时候不卡,咋回事?
    codevs 1702素数判定2
    codevs 2530大质数
    codevs 1488GangGang的烦恼
    codevs 2851 菜菜买气球
    hdu 5653 Bomber Man wants to bomb an Array
    poj 3661 Running
    poj 1651 Multiplication Puzzle
    hdu 2476 String Painter
  • 原文地址:https://www.cnblogs.com/zhouwenwu/p/2437435.html
Copyright © 2011-2022 走看看