次のコードはMySQLのデータを一覧表示していますが、MySQL設定ファイル(my.iniまたはmy.cnf)に文字コードの定義をしていないなどの原因で、文字化けすることがあります。
<html> <head> <title>PDOを使用してデータを表示する</title> </head> <body> <h3>PDOを使用してデータを表示する</h3> <?php // データベースに接続する $dsn = "mysql:dbname=testdb;host=localhost;"; $conn = new PDO($dsn, "nisi", "qazxsw"); // データを取り出す $sql = "SELECT id, nam, pre, ag FROM table1 ORDER BY id"; $stmt = $conn->prepare($sql); $stmt->execute(); // 取り出したデータを表示する echo "<table border=\"1\">"; while ($row = $stmt->fetch()) { echo "<tr>"; echo "<td>".$row["id"]."</td>"; echo "<td>".$row["nam"]."</td>"; echo "<td>".$row["pre"]."</td>"; echo "<td>".$row["ag"]."</td>"; echo "</tr>"; } echo "</table>"; ?> </body> </html>
PHP 5.3.6以降では、接続文字列にcharsetを指定することで文字化けを回避することができます。
<html> <head> <title>PDOを使用してデータを表示する</title> </head> <body> <h3>PDOを使用してデータを表示する</h3> <?php // データベースに接続する $dsn = "mysql:dbname=testdb;host=localhost;charset=utf8;"; $conn = new PDO($dsn, "nisi", "qazxsw"); // データを取り出す $sql = "SELECT id, nam, pre, ag FROM table1 ORDER BY id"; $stmt = $conn->prepare($sql); $stmt->execute(); // 取り出したデータを表示する echo "<table border=\"1\">"; while ($row = $stmt->fetch()) { echo "<tr>"; echo "<td>".$row["id"]."</td>"; echo "<td>".$row["nam"]."</td>"; echo "<td>".$row["pre"]."</td>"; echo "<td>".$row["ag"]."</td>"; echo "</tr>"; } echo "</table>"; ?> </body> </html>