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

  • 相关阅读:
    C# 用装饰模式
    31天重构学习笔记4. 降低方法
    JData 使用教程 对输入数据进行验证(服务端验证)
    sql over的作用及用法
    31天重构学习笔记3. 提升方法
    《博客园精华集》
    const和static readonly 区别
    JData 使用教程(四) 对输入数据进行验证(客户端验证)
    用JQuery制作简单实用的下拉菜单
    图片压缩后,依然很大的解决方案
  • 原文地址:https://www.cnblogs.com/zhouwenwu/p/2437435.html
Copyright © 2011-2022 走看看