MySQLの文字コードを"UTF-8"に設定しているとき、PHPで文字化けになる場合の回避方法。

http://php.net/manual/ja/mysqli.set-charset.php
ココの方法で回避可能なのですが、DBに依存する部分を少なくしたいので、
mysqli を直接使うのではなく、できれば PEAR の DB クラスを使いたいです。


(上記のリンク先より)

<?php
    $mysqli = new mysqli("localhost", "my_user", "my_password", "test");

    /* 接続状況をチェックします */
    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }
    /* 文字セットを utf8 に変更します */
    if (!$mysqli->set_charset("utf8")) {
        printf("Error loading character set utf8: %s\n", $mysqli->error);
    } else {
        printf("Current character set: %s\n", $mysqli->character_set_name());
    }

    $mysqli->close();
?>

PEARのDBクラスで同様の回避方法を見つけました。
上のソースの$mysqli は下のソースの $conn->connection にあたります。
なので、それに対してset_charset()を行えば同様のことができます。

<?php
    require_once("DB.php");

    $dsn = "mysqli://my_user:my_password@localhost/test";
    $conn = DB::connect($dsn);
    if (DB::isError($conn)) {
        die("接続に失敗しました。(T_T)<br/>" . $conn->getMessage());
    }
    print "接続に成功しました。(^o^)v<br/>";
    $conn->connection->set_charset("utf8");     // ★文字コードを"utf8"に設定


    $conn->disconnect();
?>