PHP 5.3.6以降(PDO)でMYSQLの文字化け対策(charsetを指定する)

スポンサーリンク

次のコードは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>
文字化けが解消される

文字化けが解消される

PHPの基礎が身に付いたかチェックするなら

PHP「直す力」養成ドリル
スポンサーリンク