約束の地

キャロ組

PHP で MySQL からデータをどうしても持ってこられなかった(空っぽで返ってきた)話

結論

PHP 7に適したコードではなかった*1

ダメだった場所を箇条書き

1. mysql モジュールを使っていた

ドキュメントに思いっきり書いてあります。

mysqli か PDO_MySQL のどちらかを使うことをおすすめします。 古い mysql 拡張モジュールを新規開発で使うのはおすすめしません。 というのも、これは PHP 5.5.0 で非推奨となり、PHP 7 で削除されたからです。

2. 文字コードを明示的に設定していなかった

いかんせん2年以上前の設計であったため*2、データベースの文字コードが、Default Charsetutf8Default Collationutf8_general_ciとなっていました。したがって、set_charsetメソッドを明示的に書く必要がありました。

$mysqli = new mysqli("server_address", "username", "password", "database_name");
$mysqli->set_charset("utf8");

ただ、昔はちゃんと動いていたので、本質的に何が原因なのかは完全に追えていません*3*4。そもそもこの場合はPHP 7は関係ないとは思います。

備考

環境が変わると怖い、ということです。

*1:PHP 5 時代に書いたコードだったため

*2:自分が未熟であったため

*3:clientのデフォルト文字コード?

*4:完全解決していないのであまり良くない解決法

Powered by はてなブログ