Php 将mysql表列导出为文本文件中的换行分隔值

Php 将mysql表列导出为文本文件中的换行分隔值,php,text,styles,newline,fwrite,Php,Text,Styles,Newline,Fwrite,我将此脚本输出到文本文件中: $sql = "SELECT bodyipaddress from email_body"; $query = $dbh -> prepare($sql); $query->execute(); $results=$query->fetchAll(PDO::FETCH_OBJ); $cnt=1; if($query->rowCount() > 0) { foreach ($results as $result

我将此脚本输出到文本文件中:

$sql = "SELECT bodyipaddress from email_body";
$query = $dbh -> prepare($sql);
$query->execute();
$results=$query->fetchAll(PDO::FETCH_OBJ);
$cnt=1;
if($query->rowCount() > 0)
{
    foreach ($results as $result)   
    {
        $bodyipaddress       = $result->bodyipaddress;
        // create a txt file 

        $myfile      = fopen("file.txt", "a");
        $padded_text = str_pad($bodyipaddress, 0, '', STR_PAD_RIGHT);
        fwrite($myfile, $bodyipaddress);
        fclose($myfile);
                                        
        $cnt=$cnt+1; 
    }    
} 
但是当读取文本文件时,数据的结果是纯文本,格式已经消失。 我是否可以使用
p

下面是我要为找到的每个空白更改为垂直的输出


使用输出\r\n或\n的PHP\u EOL。 或
fwrite($myfile,$bodyIP地址。“\n”)

使用输出\r\n或\n的PHP\u EOL。 或
fwrite($myfile,$bodyIP地址。“\n”)

除了添加PHP_EOL、将fopen和fclose移到foreach循环之外,我最理想的做法是这样做,因为不需要为每次迭代打开和关闭文件

$sql = "SELECT bodyipaddress from email_body";
$query = $dbh -> prepare($sql);
$query->execute();
$results=$query->fetchAll(PDO::FETCH_OBJ);
$cnt=1;
if($query->rowCount() > 0)
{
     // create a txt file outside the foreach
    $myfile      = fopen("file.txt", "a");
    foreach ($results as $result)   
    {
        $bodyipaddress       = $result->bodyipaddress;
        
        //add a new line 
        $padded_text .= PHP_EOL . str_pad($bodyipaddress, 0, '', STR_PAD_RIGHT);
        fwrite($myfile, $bodyipaddress);
                                        
        $cnt=$cnt+1; 
    }
 fclose($myfile);
} 

理想情况下,除了添加PHP_EOL、将fopen和fclose移到foreach循环之外,我会这样做,因为不需要为每次迭代打开和关闭文件

$sql = "SELECT bodyipaddress from email_body";
$query = $dbh -> prepare($sql);
$query->execute();
$results=$query->fetchAll(PDO::FETCH_OBJ);
$cnt=1;
if($query->rowCount() > 0)
{
     // create a txt file outside the foreach
    $myfile      = fopen("file.txt", "a");
    foreach ($results as $result)   
    {
        $bodyipaddress       = $result->bodyipaddress;
        
        //add a new line 
        $padded_text .= PHP_EOL . str_pad($bodyipaddress, 0, '', STR_PAD_RIGHT);
        fwrite($myfile, $bodyipaddress);
                                        
        $cnt=$cnt+1; 
    }
 fclose($myfile);
} 

看起来您正在从整个
电子邮件正文
表导出一组列式数据,因此IMO最优雅/直接的方法是:

  • 执行一个标准的pdo查询——因为没有可绑定值的参数,所以准备好的语句是不必要的开销
  • 使用
    PDO::FETCH_COLUMN
    将结果集形成平面数组
  • 由于创建或完全覆盖文件才有意义,因此我不建议使用
    fopen()
    --
    w
    上的
    a
    模式,这样就不会有附加数据。事实上,您甚至可能更喜欢以单个函数调用
    file\u put\u contents()
    ,而不是
    fopen()
    fwrite()
    ,然后
    fclose()
  • 使用
    PHP\u EOL
    内爆ip地址平面数组,使换行符序列与系统环境对齐(
    \r\n
    \n
  • 您在发布的脚本中没有使用
    $cnt
    ,因此可以完全忽略手动递增的计数。如果想知道数组中有多少ip地址,只需在结果集数组上调用
    count()
  • 我不明白你为什么要用空格将ip地址的长度改为零个字符
  • 新代码:

    file_put_contents(
        "file.txt",
        implode(
            PHP_EOL,
            $dbh->query("SELECT bodyipaddress FROM email_body")->fetchAll(PDO::FETCH_COLUMN)
        )
    );
    
    …是的,实际上就是这么简单/简洁


    如果您的
    bodyipaddress
    实际上有逗号和空格分隔的值,那么您可以在sql或php中用新行替换它们。我不知道你的表数据到底是什么样子的

    file_put_contents(
        "file.txt",
        str_replace(
            ', ',
            PHP_EOL,
            implode(
                PHP_EOL,
                $dbh->query("SELECT bodyipaddress FROM email_body")->fetchAll(PDO::FETCH_COLUMN)
            )
        )
    );
    

    看起来您正在从整个
    电子邮件正文
    表导出一组列式数据,因此IMO最优雅/直接的方法是:

  • 执行一个标准的pdo查询——因为没有可绑定值的参数,所以准备好的语句是不必要的开销
  • 使用
    PDO::FETCH_COLUMN
    将结果集形成平面数组
  • 由于创建或完全覆盖文件才有意义,因此我不建议使用
    fopen()
    --
    w
    上的
    a
    模式,这样就不会有附加数据。事实上,您甚至可能更喜欢以单个函数调用
    file\u put\u contents()
    ,而不是
    fopen()
    fwrite()
    ,然后
    fclose()
  • 使用
    PHP\u EOL
    内爆ip地址平面数组,使换行符序列与系统环境对齐(
    \r\n
    \n
  • 您在发布的脚本中没有使用
    $cnt
    ,因此可以完全忽略手动递增的计数。如果想知道数组中有多少ip地址,只需在结果集数组上调用
    count()
  • 我不明白你为什么要用空格将ip地址的长度改为零个字符
  • 新代码:

    file_put_contents(
        "file.txt",
        implode(
            PHP_EOL,
            $dbh->query("SELECT bodyipaddress FROM email_body")->fetchAll(PDO::FETCH_COLUMN)
        )
    );
    
    …是的,实际上就是这么简单/简洁


    如果您的
    bodyipaddress
    实际上有逗号和空格分隔的值,那么您可以在sql或php中用新行替换它们。我不知道你的表数据到底是什么样子的

    file_put_contents(
        "file.txt",
        str_replace(
            ', ',
            PHP_EOL,
            implode(
                PHP_EOL,
                $dbh->query("SELECT bodyipaddress FROM email_body")->fetchAll(PDO::FETCH_COLUMN)
            )
        )
    );
    

    您好,我确实尝试过这段代码,但即使在使用file\u put\u contents时,数据似乎也是附加的。因此,您的实现中出现了错误。您的结果不是
    file\u put\u contents()
    的默认行为。最好检查一下,这不是对数据库表结果的误解。从要调试的任务中删除文件写入<代码>var_导出($dbh->query(“从email_body中选择bodyipaddress”)->fetchAll(PDO::FETCH_列))对于更新,我使用您的代码进行管理,但是如果希望包含
    $padded\u text=str\u replace(',',“\n”,$bodyipaddress),是否可以$空格=PHP\u EOL。str_替换(“”,,$padded_文本)在我的代码中,因为我不想在数据库中显示原始格式,我不确定我是否完全理解您试图克服的挑战。你能在3v4l.org演示中给我看一些麻烦的文本吗?您可以围绕
    内爆()
    调用包装其他字符串操作函数
    str_replace()
    可以在
    infrade()
    调用之前或之后使用,因为它很乐意修改字符串或字符串数组。不要使用
    \n
    ,而是尝试在整个过程中使用
    PHP\u EOL
    以保持一致性。如果要删除逗号空间子字符串,请在一个操作中删除它们。
    str_replace(',',,PHP_EOL,introde(…)
    。您好,我确实尝试过这段代码,但即使在使用file_put_contents时,数据似乎也是附加的。因此,您的实现中出现了错误。您的结果不是
    file\u put\u contents()
    的默认行为。最好检查一下,这不是对数据库表结果的误解。从要调试的任务中删除文件写入<代码>var_导出($dbh->query(“从email_body中选择bodyipaddress”)->fetchAll(PDO::FETCH_列))用于更新,我是男人