2010-04-14 38 views
3

我正在尋找一種簡單而快速的方式,以PHP格式打印出MySQL SELECT查詢的結果作爲預格式化文本。我希望能夠將查詢對象傳遞給函數,並獲取打印輸出記錄集,如MySQL客戶端在運行SELECT語句時所執行的命令行。在PHP中將SELECT查詢打印爲預格式化文本的結果?

這裏是我多麼希望它看起來(即ASCII)的例子:

+----+-------------+ 
| id | countryCode | 
+----+-------------+ 
| 1 | ES   | 
| 2 | AN   | 
| 3 | AF   | 
| 4 | AX   | 
| 5 | AL   | 
| 6 | DZ   | 
| 7 | AS   | 
| 8 | AD   | 
| 9 | AO   | 
| 10 | AI   | 
+----+-------------+ 

它基本上是一個通用的導入腳本,我做一個SELECT查詢,並希望顯示結果給用戶確認。

+0

爲什麼你想要一個ASCII輸出。使用具有CSS樣式的表格會更容易。 – dnagirl 2010-04-14 17:05:45

+0

因爲我希望能有一個簡單的函數來打印ASCII格式的結果,因爲MySQL客戶端已經這樣做了。 – Camsoft 2010-04-14 19:44:54

回答

3

sprintf是你的朋友,如果你必須有一個非HTML固定寬度的輸出。

ETA:

//id: integer, max width 10 
//code: string max width 2 

$divider=sprintf("+%-10s+%-13s+",'-','-'); 

$lines[]=$divider; 
$lines[]=sprintf("|%10s|%13s|",'id','countryCode'); //header 
$lines[]=$divider; 

while($line=$records->fetch_assoc()) { 
    //store the formatted output 
    $lines[]=sprintf("| %10u | %2.2s |", $line['id'],$line['code']); 
} 
$table=implode("\n",$lines); 
echo $table; 

如果你想打印出來,而不是立即存儲的結果,使用printf instead-相同的語法。有一個合理的PHP(s)printf教程here

+0

你能解釋一下如何用sprintf打印表格嗎? – Camsoft 2010-04-14 19:42:18

+0

@Camsoft,我添加了一個相關的例子。 – dnagirl 2010-04-15 21:26:00

+0

太好了。我有幾個格式問題,但我認爲這些問題可以解決。 – Camsoft 2010-04-19 10:27:55

2
function formatResults($cols, $rows) { 
    echo'<table>'; 
    echo '<tr>'; 

    foreach ($cols as $v) { 
     echo '<th>' . $v['field'] . '</th>'; 
    } 
    echo '</tr>'; 

    foreach ($rows as $sRow) { 
     echo '<tr>'; 

     foreach ($sRow as $v) { 
      echo "<td>$v</td>"; 
     } 

     echo '</tr>'; 
    } 

    echo '</table>'; 
} 

$qry = $pdo->query('DESCRIBE table'); 
$cols = $qry->fetchAll(PDO::FETCH_ASSOC); 

$pdo->query('SELECT * FROM table'); 
$rows = $qry->fetchAll(PDO::FETCH_ASSOC); 

formatResults($cols, $rows); 

未經測試,但應該工作。

編輯:錯過[「場」]指數)

+0

只需啓用表格邊框,也許可以吐出一點CSS以自定義標題(如果需要)(我經常在標題中使用背景顏色)。 – TravisO 2010-04-14 17:06:57

+0

當然,如果你真的必須有純文本,你可以去掉HTML表格元素,並用dnagirl建議的sprintf()語句替換。 – Danten 2010-04-14 17:13:28

+0

如果你做*去HTML,你需要'htmlspecialchars()'你在'​​'和''中的每個值。 – bobince 2010-04-14 17:25:39