次のコードは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>

文字化けが解消される
