【发布时间】:2009-03-03 23:06:34
【问题描述】:
我想在博客文章中快速显示 MySQL 记录集,使用与 mysql.com 在其帮助页面中使用的相似的 ASCII 布局。我正在使用 wordpress v2.7。有任何想法吗?我还应该补充一点,我正在使用 wp-syntax 进行语法高亮,所以它实际上只是生成我感兴趣的 ASCII。
【问题讨论】:
我想在博客文章中快速显示 MySQL 记录集,使用与 mysql.com 在其帮助页面中使用的相似的 ASCII 布局。我正在使用 wordpress v2.7。有任何想法吗?我还应该补充一点,我正在使用 wp-syntax 进行语法高亮,所以它实际上只是生成我感兴趣的 ASCII。
【问题讨论】:
如果你的意思是这样的
+----+------+ |编号 |姓名 | +----+------+ | 1 |鲍勃 | | 2 |玛丽 | | 3 |简 | | 4 |丽莎 | +----+------+那么只需从 MySQL 命令行运行查询就足够了,因为在命令行上以交互模式运行查询时,结果会被格式化。然后,您可以将它们复制并粘贴到您的博客文章中,并在必要时用<pre> 或类似名称将它们括起来。
【讨论】:
您所说的 ASCII 是 MySQL 命令行客户端显示其结果的方式。
mysql> select task_nextrun,task_name from pref_task;
+--------------+-----------------+
| task_nextrun | task_name |
+--------------+-----------------+
| 1235999760 | datacache_clean |
| 1236002760 | process_stats |
+--------------+-----------------+
2 rows in set (0.00 sec)
mysql>
您只需将命令发送到 MySQL 命令行客户端。
【讨论】:
如果您想在不调用命令行客户端的情况下执行此操作,请使用 PHP 中的一种方法。请注意,这是非常粗略的代码,我还没有测试过,我主要是想解释这个过程。它还将左对齐所有内容,我相信 mysql 客户端会右对齐数字,模拟这需要更多的工作,但没有什么困难。
假设您已经使用类似 mysqli_result 的 fetch_all() 函数将记录提取到名为 $resultset 的仅关联数组中:
// determine maximum value lengths for each column
foreach ($resultset as $result)
{
foreach ($result as $col => $val)
{
if (strlen($val) > $max_length[$col])
{
$max_length[$col] = strlen($val);
}
}
}
// construct border lines
foreach ($max_length as $col_length)
{
$border_line .= '+'.str_repeat('-', $col_length+2);
}
$border_line .= "+";
// print header
print $border_line."<br />\n";
foreach ($max_length as $col_name => $col_length)
{
print '| '.str_pad($col_name, $col_length, ' ').' |';
}
print "<br />\n";
print $border_line."<br />\n";
// print data
foreach ($resultset as $result)
{
foreach ($result as $col => $val)
{
print '| '.str_pad($val, $max_length[$col], ' ').' |';
}
print "<br />\n";
}
print $border_line."<br />\n";
【讨论】: