LoginSignup
0
0

More than 1 year has passed since last update.

[PHP]mysqlで日本語を保存する時に文字化けしてしまう

Posted at

こんにちはありんこです。
最近パーフェクトPHPをやっているのですが、mysqlでデータを保存した時に文字化けしてしまって困ったので書いておきます。

TL;DR

PDOをnewする時に、charsetをちゃんと設定しましょう。

$dbConnection = new PDO('mysql:host=db;dbname=online_bbs;charset=utf8', 'docker', 'docker');

どんな感じに困った?

Docker環境で進めているのですが、MySQLの文字コードはちゃんとutf8mb4にしているし、
PHPの文字コードもUTF−8(多分)だし、
HTMLも<meta charset="UTF-8">ってしているしで詰んだって感じでした。

原因

パーフェクトPHPがPHP5系で書かれていて、自分がパーフェクトPHPをPHP8系のバージョンで進めているので使用できる関数に差があったのが原因。
というかPHP7系からmysql系のモジュールが、MySQLiPDO_MYSQLに置き換わって、削除されたらしい。

例えば、mysql_connect()PDO_MySQLだと、new PDO();といった感じ。

で、ドキュメントをちゃんと見たら例のとこに書いてあった。

どんな感じになるの?

// DB接続
$dbConnection = new PDO('mysql:host=db;dbname=online_bbs;charset=utf8', 'docker', 'docker');
// ヒアドキュメントでSQL記述
$postIndexSql = <<<SQL
SELECT
    *
FROM
    posts
ORDER BY
    created_at DESC
SQL;
// クエリ実行
$postIndexResult = $dbConnection->query($postIndexSql);

// クエリ成功かつ0以上結果が返ってきた場合
if ($postIndexResult !== false && $postIndexResult->rowCount() > 0){
    // 一行ずつfetch
    while ($post = $postIndexResult->fetch()) {
        // プロパティ出力
        echo $post['name'];
    }
}

まとめ

古いバージョンで書かれているPHPも、しっかりとドキュメント見れば同じように書き換えられる!
困ったらドキュメントを見よう!

ちなみに

パーフェクトPHPは下記のような環境で進めています!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0