Php 如何从MySQL表数据创建Word文档?

Php 如何从MySQL表数据创建Word文档?,php,mysql,csv,Php,Mysql,Csv,我正在用PHP从MySQL表数据生成Word文档。为此,我编写了以下代码: $fh = fopen('C:\wamp\www\data.txt', 'w'); mysql_connect("localhost","root","admin"); mysql_select_db("appulentoweb", $con); $result = mysql_query("SELECT * FROM freeadvice"); while ($row = mysql_fetch_array($

我正在用PHP从MySQL表数据生成Word文档。为此,我编写了以下代码:

$fh = fopen('C:\wamp\www\data.txt', 'w');
mysql_connect("localhost","root","admin");
 mysql_select_db("appulentoweb", $con);  

$result = mysql_query("SELECT * FROM freeadvice");
while ($row = mysql_fetch_array($result)) {
    $last = end($row);
    foreach ($row as $item) {
        fwrite($fh, $item);
        if ($item != $last)
            fwrite($fh, "\t");
    }
    fwrite($fh, "\n");
}
fclose($fh);

我已经创建了一个名为Data.txt的空文本文件,但数据没有进入该文件。还有其他选择吗?

如果您愿意,请随意使用我编写的这个脚本,从我们工作的数据仓库中提取大型(有时是千兆字节)CSV文件。它几乎不使用任何系统资源,而且足够轻,速度也很快。我从命令行界面运行它,因此输出被编写成一个漂亮的简单显示

它将检查连接以确保它可以连接,然后确保查询可以运行(即没有语法错误),并将数据提取到CSV文件中,为您提供作为文件第一行的查询列名。它会在运行时通知您该行已打开(精确到千),因此如果您知道resultset的预期大小,您可以猜测还剩下多少

<?php

    // I have this set up for a few databases, so I keep all my usernames, passwords and extra options.
    // DWH
    $dwhusername = 'user';
    $dwhpassword = 'pass';
    $dwhhostname = 'oci:dbname=databaseName';
    $options = array(PDO::ATTR_AUTOCOMMIT=>FALSE);

    // EDW
    $edwusername = 'user';
    $edwpassword = 'pass';
    $edwhostname = 'oci:dbname=databaseName';

    // MySQL
    $musername = 'user';
    $mpassword = 'pass';
    $mhostname = 'mysql:host=localhost;dbname=databaseName';

    // Feel free to set this to anything you like. It is just used to give you a visual start and end time.
    date_default_timezone_set('Australia/Sydney');

    // Enter the filename that you want to save to below.
    $File = "C:\Server\yourFileName.csv";

    // Enter your SQL query that you use here.
    $sql="
    select
        col1 as Column1,
        col2 as Sales,
        col3 as TradeDate
    from
        myTable
    where
        col1=someCondition;
    ";

    function time_diff_conv($start, $s)
    {
        $string="";
        $t = array( //suffixes
            'd' => 86400,
            'h' => 3600,
            'm' => 60,
        );
        $s = abs($s - $start);
        foreach($t as $key => &$val) {
            $$key = floor($s/$val);
            $s -= ($$key*$val);
            $string .= ($$key==0) ? '' : $$key . "$key ";
        }
        return $string . $s. 's';
    }

    echo "\n\nStarting extract job on ".date('l jS \of F Y \a\t h:i:s A')."\n";


    $Handle = fopen($File, 'w');

    try{
        $dbh = new PDO($dwhhostname, $dwhusername, $dwhpassword, $options);
        //$dbh = new PDO($edwhostname, $edwusername, $edwpassword, $options);
        //$dbh = new PDO($mhostname, $musername, $mpassword);
        echo "Connection to database appears fine. Running query.\n";
        $timeQuery=time();
        $sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
        $dbh->beginTransaction();
        $stmt = $dbh->query($sql);
        $Data="";
        $data2="";

        $obj = $stmt->fetch(PDO::FETCH_ASSOC);
        foreach($obj as $key => $value)
        {
            $Data.=$key.",";
            $data2.=$value.",";

        }
        $i++;
        $Data=substr($Data,0,-1);
        $Data.="\n".substr($data2,0,-1)."\n";
        $data2=null;
        fwrite($Handle, $Data);
        $timeResult=time();
        echo "Query Result Returned on ".date('l jS \of F Y \a\t h:i:s A')."\nExporting data now...\n\n";

        $Data="";

        while($obj = $stmt->fetch(PDO::FETCH_ASSOC))
        {
            foreach($obj as $key => $value)
            {
                $Data.=$value.",";
            }
            $Data=substr($Data,0,-1);
            $Data.="\n";
            if($i%1000==0)
            {
                fwrite($Handle, $Data);
                $Data="";
                echo "\rWritten $i rows of data to the file.\r";
            }
            $i++;
        }
        fwrite($Handle, $Data);
        $Data="";
        $stmt=null;
        $dbh->commit();
        $dbh=null;

    }
    catch(PDOException $e){
        echo 'Error : '.$e->getMessage();
        exit();
    }

    $timeComplete=time();

    $timeQueryRes=time_diff_conv($timeQuery, $timeResult);
    $timeResRes=time_diff_conv($timeResult, $timeComplete);
    $timeAverage=number_format(round($i/($timeComplete-$timeResult+1),0));
    echo "Query took ".$timeQueryRes." to return a result\n";
    echo "The resultset of $i rows took ".$timeResRes." to completely extract at an average of ".$timeAverage." rows per second.\n";

    fclose($Handle);

    echo "Data written to: ".$File."\n";
    echo "Finished extract job on ".date('l jS \of F Y \a\t h:i:s A')."\n\n\n";

?>

我为您将其重新标记为CSV,因为您的代码与MS Word无关,但看起来您正在创建一个以制表符分隔的文本文件。使用fputcsv()而不是创建自己的制表符分隔字符串是否有其他方法可以转换Word文档?您真的想转换为Word文档吗。。。如果是,为什么!您的代码只是从数据库中转储数据,没有任何格式、章节标题或任何提示需要Word格式的功能。。。如果您真的需要Word,请查看PHPWord库-如果您只是手动执行此操作,phpMyAdmin可以导出到Word
U:\>c:\server\wamp\bin\php\php5.3.0\php.exe -f "C:\server\wamp\www\store\inc\out
putData2.php"


Starting extract job on Thursday 19th of July 2012 at 04:25:44 PM
Connection to database appears fine. Running query.
Query Result Returned on Thursday 19th of July 2012 at 04:29:28 PM
Exporting data now...

Query took 3m 43s to return a resultfile.
The resultset of 1341447 rows took 4m 37s to completely extract at an average of
 4,825 rows per second.
Data written to: C:\Server\DailyStoreSales-2012-06-27.csv
Finished extract job on Thursday 19th of July 2012 at 04:34:05 PM



U:\>