【问题标题】:Retrieve data from mysql and display in the form of ascii text table in browser从mysql中检索数据并在浏览器中以ascii文本表的形式显示
【发布时间】:2016-02-21 08:17:18
【问题描述】:

如何在浏览器中查询mysql数据并以ascii文本表的形式显示,就像在命令行中获取一样。下面给出一个小例子:

+------+---------+---------------------+------------+
| S.No | S.R.NO. | EMPLOYEE NAME       | D.O.B      |
+------+---------+---------------------+------------+
|    1 |       0 | T CHANDRASHEKAR     | 01/01/2000 |
|    2 |  000102 | A RAMESH            | 01/01/2000 |
|    3 |  601026 | B DEEPAK KUMAR      | 01/01/2000 |
|    4 |  543250 | N VIRUPAKSHAIAH     | 02/01/2000 |
|    5 |  610019 | ANAND S GUNDI       | 15/01/2000 |
|    6 |  535035 | ADAM BASHA          | 27/01/2000 |
|    7 |  625893 | A N MOHAN KUMAR     | 06/02/2000 |
|    8 |  547830 | RAJENDRA NAIK       | 07/02/2000 |
|    9 |  698742 | S M SUSHMA          | 19/02/2000 |
|   10 |  655542 | B JAYACHANDRA       | 24/02/2000 |
|   11 |  624769 | B HANUMANTHAPPA     | 25/02/2000 |

如果可以使用php就更好了。请帮忙。

【问题讨论】:

  • 你在问什么?如何从数据库中获取数据或如何输出?如果您都不知道,那么您可能应该从阅读一些教程开始。
  • Select * from mytable; 在命令行中为您提供上述输出。但我希望使用 php 代码在浏览器中使用相同的格式。通常,您添加 html 表格并格式化数据,但我希望它是 ascii 文本表格格式。

标签: php mysql text ascii


【解决方案1】:

方法

这是可能的。主要困难在于字符串长度的可变性,这通常会导致输出数据难以阅读。

为了解决这个问题,我建议你:

  • 找出每列的最大字符串长度
  • 输出带有上下边框的标题,标题名称填充为与最大单元格宽度相同的宽度
  • 输出每一行,并将单元格填充到目标列宽。

代码示例

我目前无法对下面显示的代码进行单元测试,但应该没问题;如果您有任何问题,请发表评论。

<?php

// Open connection
$mysqli = new mysqli("db_host", "db_user", "db_password", "db_schema");

// Check that connection succeeded
if ($mysqli->connect_errno) {
    printf("Connect failed: %s\n", $mysqli->connect_error);
    exit();
}

// Prepare query
$query = "SELECT * FROM `myTable`";

// Fetch results as associative array
$resultSet = [];
if ($result = $mysqli->query($query)) {

    while ($row = $result->fetch_assoc()) {
        $resultSet[] = $row;
    }

    // Free result set
    $result->free();

    // Close Connection to DB
    $mysqli->close();
} else {

  // Close Connection to DB and print error message
  $mysqli->close();
  die('An error occurred when executing SQL, please check your SQL query.');
}



// If results empty, output error
if (count($resultSet)<1) {
  die('<pre>----NO DATA----'+"\n\n"+'Please revise your query</pre>');
}

// Get column names
$keys = array_keys($resultSet[0]);

// Iterate over column names, get starting widths
$maxLength = [];
foreach ($keys as $column) {
  $maxLength[$column] = mb_strlen($column);
}

// Iterate over result-set, get maximum string length for each column
foreach ($resultSet as $row) {
  foreach ($keys as $column) {

    // If current cell length is greater than column width, increase column width
    if (mb_strlen($row[$column]) > $maxLength[$column]) {
      $maxLength[$column] = mb_strlen($row[$column]);
    }

  }
}

echo '<pre>';

// Output top border
echo '+';
foreach ($keys as $column) {
  echo str_repeat('-', $maxLength[$column]+2);
  echo '+';
}
echo "\n";

// Output header
echo '| ';
foreach ($keys as $column) {
  echo $column.str_repeat(' ', $maxLength[$column] - mb_strlen($column));
  echo ' | ';
}
echo "\n";

// Output bottom border
echo '+';
foreach ($keys as $column) {
  echo str_repeat('-', $maxLength[$column]+2);
  echo '+';
}
echo "\n";

// Output all rows
foreach ($resultSet as $row) {
  echo '| ';
  foreach ($keys as $column) {
    echo $row[$column].str_repeat(' ', $maxLength[$column] - mb_strlen($row[$column]));
    echo ' | ';
  }
echo "\n";
}

echo '</pre>';


?>

注意 上面的代码是多字节安全的,但它忽略了字符宽度;如果输出包含可变宽度的字符,那么列分隔符中可能会有轻微的“扭结”。如果您在显示中遇到此类问题,这可能值得修改。

【讨论】:

  • +------+---------+---------------------+------------+-------------+| 0 | 0 | 0 | 0 | 0 | +------+---------+---------------------+------------+-------------+| Warning: main(): Couldn't fetch mysqli_result in C:\xampp\htdocs\bellary\birthdays.php on line 88 这就是我得到的
  • @adam1969in 更正了代码示例中的拼写错误,请重新运行,让我知道它是怎么回事。我正在移动,所以仍然无法在本地测试。
  • 太棒了……!在更正了第 71 行和第 92 行中的两个错别字之后,它给出了所需的结果。但是,开头的'|'仅打印两行,然后省略所有其他行。也许某处有错字,我会尽快检查。同时,如果你能得到它,请转达它。再次出色,非常感谢。
  • @adam1969in 将注释“输出所有行”后的“回声”语句下移一行; IE。在每个循环的第一个内部移动。我已相应地更正了我的答案。
  • 完美@彼得斯科特。优秀,脱帽致敬。只需更正第 71 行中的拼写错误“;”在 echo "\n" code 和第 92 行 ` echo $row[$column]str_repeat ` a "." 之后缺少,它应该是`$row[$column].str_repeat`。一切都很完美。非常感谢。
【解决方案2】:

编辑:如果不编写精美的包装脚本来模拟确切的 MySQL shell 输出(例如在@PeterScott 的回答中),似乎是不可能的。最接近这一点的可能是将输出转储到临时文件中:

<?php
mysqli_query("select * from mytable into outfile '/tmp/mytable.out'");

然后在浏览器中输出这个文件,用PRE标签包裹它:

<?php
$output = file_get_contents('/tmp/mytable.out');
echo '<pre>'. $output .'</pre>';

恐怕无法直接从 MySQL 控制台获取这些数据。

【讨论】:

  • 不错,但是表格的横竖线缺失,导致表格数据无格式
  • @SergeyVidusov 查看我的回答;似乎一些简单的字符串填充使输出变得非常容易。
  • @PeterScott 正是我所说的“花式包装脚本”的意思:)
  • @SergeyVidusov 啊,就像你那时一样。
【解决方案3】:
mysql -uroot -p dbname -e 'select * from table_name' -H > dump.php

然后就可以通过浏览器访问表格内容了:http://192.168.2.xx/dump.php

mysql命令行中的-H表示以HTML格式输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2017-07-13
    • 2017-07-19
    • 1970-01-01
    • 2019-04-28
    • 1970-01-01
    相关资源
    最近更新 更多