将 mysql table 列导出为文本文件中的换行符分隔值
Export mysql table column as newline-separated values in text file
我有这个脚本可以输出到文本文件中:
$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
来垂直设置文本样式吗
下面是我想为找到的每个空格更改为垂直的输出。
使用 PHP_EOL 输出 \r\n 或 \n 。
要么
fwrite($myfile, $bodyipaddress . "\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);
}
看起来您正在从整个 email_body
table 中导出一组柱状数据,所以我认为最 elegant/direct 的方法是:
- 执行标准的 pdo 查询——因为没有参数可以绑定值,准备好的语句是不必要的开销。
- 使用
PDO::FETCH_COLUMN
. 将结果集形成平面数组
- 因为只有创建或完全覆盖文件才有意义,所以我不推荐
fopen()
上的 a
模式 -- w
似乎更合适,这样会有没有附加数据。事实上,您甚至可能更愿意将 file_put_contents()
作为单个函数调用进行调用,而不是 fopen()
、fwrite()
,然后是 fclose()
.
- 用
PHP_EOL
分解 ip 地址的平面数组,使换行符序列与您的系统环境对齐(\r\n
或 \n
)。
- 您没有在发布的脚本中使用
$cnt
,因此可以完全省略手动递增的计数。如果你想知道数组中有多少个ip地址,只需在结果集数组上调用count()
。
- 我不明白你为什么要用空 spaces 右填充你的 ip 地址到零个字符的长度。
新代码:
file_put_contents(
"file.txt",
implode(
PHP_EOL,
$dbh->query("SELECT bodyipaddress FROM email_body")->fetchAll(PDO::FETCH_COLUMN)
)
);
...是的,其实就是simple/concise.
如果您的 bodyipaddress
实际上 有逗号和space 分隔值,那么您可以在 sql 或在 php。我不知道你的 table 数据到底是什么样的。
file_put_contents(
"file.txt",
str_replace(
', ',
PHP_EOL,
implode(
PHP_EOL,
$dbh->query("SELECT bodyipaddress FROM email_body")->fetchAll(PDO::FETCH_COLUMN)
)
)
);
我有这个脚本可以输出到文本文件中:
$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
下面是我想为找到的每个空格更改为垂直的输出。
使用 PHP_EOL 输出 \r\n 或 \n 。 要么 fwrite($myfile, $bodyipaddress . "\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);
}
看起来您正在从整个 email_body
table 中导出一组柱状数据,所以我认为最 elegant/direct 的方法是:
- 执行标准的 pdo 查询——因为没有参数可以绑定值,准备好的语句是不必要的开销。
- 使用
PDO::FETCH_COLUMN
. 将结果集形成平面数组
- 因为只有创建或完全覆盖文件才有意义,所以我不推荐
fopen()
上的a
模式 --w
似乎更合适,这样会有没有附加数据。事实上,您甚至可能更愿意将file_put_contents()
作为单个函数调用进行调用,而不是fopen()
、fwrite()
,然后是fclose()
. - 用
PHP_EOL
分解 ip 地址的平面数组,使换行符序列与您的系统环境对齐(\r\n
或\n
)。 - 您没有在发布的脚本中使用
$cnt
,因此可以完全省略手动递增的计数。如果你想知道数组中有多少个ip地址,只需在结果集数组上调用count()
。 - 我不明白你为什么要用空 spaces 右填充你的 ip 地址到零个字符的长度。
新代码:
file_put_contents(
"file.txt",
implode(
PHP_EOL,
$dbh->query("SELECT bodyipaddress FROM email_body")->fetchAll(PDO::FETCH_COLUMN)
)
);
...是的,其实就是simple/concise.
如果您的 bodyipaddress
实际上 有逗号和space 分隔值,那么您可以在 sql 或在 php。我不知道你的 table 数据到底是什么样的。
file_put_contents(
"file.txt",
str_replace(
', ',
PHP_EOL,
implode(
PHP_EOL,
$dbh->query("SELECT bodyipaddress FROM email_body")->fetchAll(PDO::FETCH_COLUMN)
)
)
);