サーバ管理って難しい(3)
こんにちは、さちです!
前回の PHP と MySQL の連携について書きましたが、今回はその続編を書こうと思います。要するに自分の失敗談の続きです。
もし、この記事を書くことで他の方のお役に立てられれば幸いです!
前回のプログラムをもう一度見てみましょう。
<?php $con = mysql_connect(サーバ名, ユーザ名, パスワード) ; mysql_select_db(データベース名); mysql_query("SET NAMES eucjpms;"); $re = mysql_query("SQL",$con); echo("<table border=¥"1¥">"); while($array = mysql_fetch_array($re)) { echo("<tr><td>".$array[0]."</td><td>".$array[1]."</td></tr>¥"); } echo("</table>"); ?>
今回は5行目に注目です。
「MySQL」から データを取り出すクエリを実行する前に、SET NAMES eucjpms;
というクエリが実行されています。実は、前回は触れていませんでしたが、この行はこっそりと付けていました。
このクエリはデータベース「MySQL」で使用している「文字コード」を、コンピュータに教えてあげているものなんです。
実際に私の使っているサーバでこの一行がないと、test.php の実行結果は次のようになってしまいます。
?? | ??? |
?? | ???? |
?? | ??? |
文字化けしてますね。
コンピュータが処理する文字コードと MySQL の文字コードが一致しないために、このようなことが起きてしまいます。(ちなみに、半角英数は文字化けしません。日本語のみ文字化けします)
この test.php の場合だと、MySQL は EUC-JP で動いているという仮定になっているので、文字化けを回避するために 「ujis」 と記述しています。
文字コードと記述方法をまとめてみます(完全に私の備忘記録ですがw)。
文字コード | 記述方法 |
---|---|
SHIFT-JIS | sjis |
EUC-JP | ujis |
UTF-8 | utf8 |
使っている文字コードを ujis
のところに代わりに記述してください。これで文字化けは解消です。
ただ、インターネットで検索をしてみたところ、どうも SET NAMES **** ;
はセキュリティ的に危険という次のような記述を
ちらほら見かけました。
うーん、わからん……。まず、APIって何だろうというところからすでに疑問です。セキュリティのことはないがしろにはできないし、早いうちに勉強しなくてはいけませんね…。
<< 前へ | サーバ管理って難しい(3) | 次へ >>
サーバ管理って難しいTOPへ
コメント