PDO -> 序章
これまでネイティブ関数の mysql で DB 操作をしてきたのだが
そろそろ何か使ってみようと思い立った。
PEAR::DB が第1候補だったのだが
残念ながら動作が相当鈍いらしい。
そこで以前挑戦して果てた PDO を思い出したわけだが
あれこれ見ていると、実はもっといっぱいあって
mysqli、MDB、MDB2、adoなんとか・・・まぁ 色々あるらしい・・・。
でもまぁ、ZF が使っているらしいし
一般的らしい PDO にすることにした。
PHP5.2 より標準装備らしい。
ところが、PDO を検索するうちに
さくらでは PDO が使えないとか。
ええええええ!
あれ?! 私は使える・・・。
ん??? 使える。
あれれ?
そういえば、はるか昔にトライしたから
それが残っているのかしら・・・。
ま、使えるんだからいっか♪
更に大きな問題ががが。
前に 文字化け対策 で書いた
SET NAMES utf8
これを使わないと、どうしても文字化けする><
あれこれググっても、PDO の方法は1つ しかなく、
そのやり方でも文字化けした。
何せさくらでは PDO の my.cnf はいじれない。
ん~、でもまぁ せっかくだから
どうせ小さいサイトだし、ということで
mb_convert_encoding を毎回使うことでひとまず対応してみる。
さて、1から勉強しないといけないのだ。
mb_convert_encoding だと「波ダッシュ問題」が残る。
ん~ どうしても SET NAMES utf8 を使わないとだめなのかなぁ。
PDO では、PHP 5.3.6 から、DSN で文字コードを指定できるようになったとのこと。
php:PDO_MYSQL DSN
- <?php
- $dsn = 'mysql:host=localhost;dbname=testdb';
- $username = 'username';
- $password = 'password';
- $options = array(
- PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
- );
- $dbh = new PDO($dsn, $username, $password, $options);
- ?>
こんな書き方も!
- <?php
- $pdo = new PDO("mysql:host=localhost;dbname=world;charset=utf8", 'my_user', 'my_pass');
- ?>
php:文字セット
こちらの方が、スマートだね~♪
こちらの書き方で、PHP 5.4.7 環境にて、文字化けが直ることを確認。