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::FETCH_COLUMN
将结果集形成平面数组fopen()
--w
上的a
模式,这样就不会有附加数据。事实上,您甚至可能更喜欢以单个函数调用file\u put\u contents()
,而不是fopen()
,fwrite()
,然后fclose()
PHP\u EOL
内爆ip地址平面数组,使换行符序列与系统环境对齐(\r\n
或\n
)$cnt
,因此可以完全忽略手动递增的计数。如果想知道数组中有多少ip地址,只需在结果集数组上调用count()
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::FETCH_COLUMN
将结果集形成平面数组fopen()
--w
上的a
模式,这样就不会有附加数据。事实上,您甚至可能更喜欢以单个函数调用file\u put\u contents()
,而不是fopen()
,fwrite()
,然后fclose()
PHP\u EOL
内爆ip地址平面数组,使换行符序列与系统环境对齐(\r\n
或\n
)$cnt
,因此可以完全忽略手动递增的计数。如果想知道数组中有多少ip地址,只需在结果集数组上调用count()
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_列))代码>用于更新,我是男人