-2

次のようなテキスト結果を取得したい:

+----+-------+----------------------------------+----+
| id | login | pwd                              | su |
+----+-------+----------------------------------+----+
|  1 | root  | c4ca4238a0b923820dcc509a6f75849b |  1 |
+----+-------+----------------------------------+----+
1 row in set (0.00 sec)

PHP(文字列)で。

PHP での例:

$query = mysql_query("SELECT * FROM users");
for (; $row = mysql_fetch_assoc($query); $data[] = $row);

配列の配列 ($data) を取得します。

$data = 
   0 => (id=>1, login=>root..)

しかし、私はこれを文字列として取得したい:

+----+-------+----------------------------------+----+
| id | login | pwd                              | su |
+----+-------+----------------------------------+----+
|  1 | root  | c4ca4238a0b923820dcc509a6f75849b |  1 |
+----+-------+----------------------------------+----+
1 row in set (0.00 sec)

ちなみに、クエリ「insert into users set login = 'sp', pwd = 1, su = 0」の場合、この文字列は「クエリ OK、影響を受ける 1 行、2 つの警告 (0.18 秒)」である必要があります。

PHPでもSQLターミナルのように!

4

3 に答える 3

2

mysqlクライアントを外部コマンドとして呼び出すか、自分で ASCII 描画テーブルを作成してください。PHP の MySQL ライブラリ関数を使用するだけでは、これを取得することはできません。私の頭の上から、

$result = `echo 'SELECT * FROM users' | mysql --user=username --password=password dbname`;

(醜い、遅い、安全でない、お勧めしません); または単に配列として取得し、反復し、何をするかを模倣するプラスで装飾しmysqlます (推奨)。とても簡単です。

ただし、PHP プログラムをコマンドライン ツールとして使用している場合を除き、なぜそれが必要なのかわかりません。

于 2012-05-18T12:04:16.507 に答える
0

次の sql をクエリできます。

SELECT GROUP_CONCAT(id, ' | ', login, ' | ', pwd, ' | ', su) 

AS 'User Object' FROM users group by id

結果は次のようになります。

ここに画像の説明を入力

于 2012-05-21T01:45:35.520 に答える
0

データベースの結果を配列の配列に収集します( $data 変数は正しいです)

echo ascii_table($data);

私はstereofrogという名前の人から次のものを盗みました

function ascii_table($data) {

    $keys = array_keys(end($data));

    # calculate optimal width
    $wid = array_map('strlen', $keys);
    foreach($data as $row) {
        foreach(array_values($row) as $k => $v)
            $wid[$k] = max($wid[$k], strlen($v));
    }

    # build format and separator strings
    foreach($wid as $k => $v) {
        $fmt[$k] = "%-{$v}s";
        $sep[$k] = str_repeat('-', $v);
    }
    $fmt = '| ' . implode(' | ', $fmt) . ' |';
    $sep = '+-' . implode('-+-', $sep) . '-+';

    # create header
    $buf = array($sep, vsprintf($fmt, $keys), $sep);

    # print data
    foreach($data as $row) {
        $buf[] = vsprintf($fmt, $row);
        $buf[] = $sep;
    }

    # finis
    return implode("\n", $buf);
}
于 2012-05-18T12:50:04.650 に答える