※ ChatGPTを利用し、要約された質問です(原文:PHP->MySQLに漢字データが渡らない)
PHP->MySQLで漢字データが渡らない
このQ&Aのポイント
Fedora11の自家サーバー&「ウェブDYIで行こう!たのしいPHP入門」という書籍で、PHPのお勉強をしています。下記のコードで「佐藤」という漢字データがMySQLに渡りません。
MySQLの文字コードはUTF-8に設定していますが、nameフィールドには何も表示されません。
php.iniの設定を変更しても問題は解決しませんでした。原因と対策が分かる方がいらっしゃいましたら、ご教示のほどよろしくお願いします。
Fedora11の自家サーバー&「ウェブDYIで行こう!たのしいPHP入門」という書籍で、PHPのお勉強をしています。下記のコードで「佐藤」という漢字データがMySQLに渡りません。satoに変更すると、問題なく渡ります。MySQLの文字コードはUTF-8に設定しています。(全てUTF-8で統一しているつもり)文字化けではなく、print_r($result);のところで、nameフィールドは何も表示されません。htmlソースを見ても、何も存在していない様に見えます。
(注)書籍のコードに、しつこい位UTF-8の記述を足してみておりますが、足す前も同様でした。
<html><body>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<pre><?php
ini_set("default_charset", "UTF-8");
$dsn = "mysql:host=localhost;dbname=xxxxxx";
$user = "xxxxxx";
$password = "*******";
$db = new PDO($dsn, $user, $password);
$db->exec("SET NAMES utf8");
$insert_query = "INSERT INTO users (name, email) " ."VALUES ('佐藤','sato@example.com')";
$db->exec($insert_query);
$result = $db->query("SELECT * FROM users")->fetchAll();
print_r($result);
?>
</body></html>
最初php.iniは初期値のままでやっていて、下記記事を参考に
http://hain.jp/index.php/tech-j
次の通り設定してみましたが、事態は変わりませんでした。
output_buffering = Off
; default_charset = EUC-JP
mbstring.language = Japanese
mbstring.encoding_translation = off
mbstring.http_input = pass
mbstring.http_output = pass
mbstring.internal_encoding = UTF-8
mbstring.substitute_character = none
mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII
原因と対策がお分かりの方がいらっしゃいましたら、御教示のほど、よろしくお願いします。
お礼
アドバイスありがとうございます。 試行錯誤している内に自己解決いたしましたが、ご指摘の原因でした。 Windows端末から接続しているため、当初エディターにTeraPadを使って、UTF-8N,LFで保存しておりましたが、途中からPHPエディタ(c)phpspot(UTF-8,LFに設定)に切り替えました。問題のコードは、TeraPad時代のものを、PHPエディタのプロジェクトに読み込んだだけで、一度も編集していなかったのですね。試行錯誤でPHPエディタ内でいじって改名したコードは動作したため、その差が分からず悩んでおりましたが、ふと思いついてTeraPadで開いてみて、S-JIS,LFで誤って保存していた事が分かりました。 なお、教えていただいた、var_dump()使ってみましたが、やはり化けてはおらず、空でした。