Sidebar |
PDO::mysql_client_encodingが 無くてSQLで発行すると不便なので実装してみた。
PDO::mysql_set_charset($charsetname) PDO::mysql_client_encoding() PDO::mysql_select_db($dbname) 使い方 $dbh->mysql_set_charset('utf8'); echo $dbh->mysql_client_encoding(); 同じことをsqlで発行するには $dbh->exec('SET CHARACTER SET utf8 '); show variables like 'character_set_client' で Value列を取得 SQLレベルでPDOに実装をまねるなら PDOクラスを継承するといい。 もし、外部から値を受け取る場合は、 その際は、外部から値を受け付けないようにSQLインジェクション対策が必要だろう。 SHOW CHARACTER SETを使うと一覧がとれるので、その中と照合して、設定するようにすれば、よい。 今回は、PDO_MysqlのCソースレベルで対応した。 PHP_ME , PHP_METHOD の PHP_をZEND_にするようにとヘルプにはあったが、 ・名前が嫌い、銘銘方法がきにくわない(企業名だし) ・他のPDOが使っていない ということで今回は使うのは避けた。 有効桁の低い+中途半端なスクリプト言語に期待しても意味がないし、 わざわざ、PDO Cソースレベルので改造は、 コンパイルなどの手間がかかるので 素直に、適当な関数を作るか、PDOを継承したクラスにスクリプトコードで実装するほうが現実的だろう。 「実行結果」 sql: mysql_client_encoding: latin1 get_class :PDO is_a($dbh ,'PDO') :true is_a($dbh ,'PDO_MYSQL') :false $dbh instanceof PDO_MYSQL :false PDO::ATTR_DRIVER_NAME :mysql PDO::ATTR_SERVER_VERSION :5.1.31-community PDO::ATTR_CLIENT_VERSION :5.0.67 check encoding mysql_client_encoding: latin1 set utf8 :true mysql_client_encoding: utf8 mysql_select_db true » 続きを読む |
Sidebar |