AMG Solution

PHPのPDOでMySQL使ったら文字化けしたときの対処方法

feels

こんにちは。堀部です。
 
CODEMATIC-PHP版のver3.0の目玉でもある、MBD2からPDOへの変更を行っている中で、文字化けが発生しました。そこでどのようにしたら解決できるのか対処方法を調べてみました。

文字化けしたときの対処方法

PDO_1
 
PDOの文字コード指定は、PHPのバージョンによって対応方法が異なります。まずはお使いのPHPのバージョンを確認して下さい。

PHP5.3.6以降の場合

PDOの接続文字列(DSN:Data Source Name)によって文字コードの指定ができます。
 
記述例:

PHP5.3.5以前の場合

この場合は接続文字列の指定が無視されてしまうので、別の方法で対処する必要があります。
 
まず、お使いの環境がLinux環境の場合は「/etc/my.cnf」による指定が可能です。
 
記述例:

 
/etc/my.cnf

 
Windows環境の場合は「/etc/my.cnf」が使用できませんので、「’SET NAMES utf8’」を使用します。ただし、sjisの指定は脆弱性があるため使用できません。
 
記述例:

 
PDO_2
 
《参考サイト》

  • PHP:PDO_MYSQL DSN
  • PHPでデータベースに接続するときのまとめ
  •  
    上記いずれかの対応を行うと無事文字化けが解消されていると思います。

    PHPのバージョンを判定する方法

    動作させる環境が複数あり、それぞれの環境でPHPのバージョンが異なる場合に、PHPのバージョンをプログラム内で判断したいという際は以下のように記述することで処理を分岐させることができます。
     
    記述例:

    SQLインジェクション対策

    PDOでSQLインジェクション対策を行うためには、以下のことを実施する必要があります。
     

  • DSNに文字コードを指定する。
  • 静的プレースホルダを使用する。
  •  
    PDOで静的プレースホルダを使用するためには、以下の指定をします。
     
    記述例:

    プレースホルダには静的と動的があり、静的プレースホルダは脆弱性が生じず安全な方法となります。詳しくはIPA の  安全な SQL の呼び出し方を参照して下さい。

    まとめ

    今回DB接続方式をMDB2からPDOに変更したことにより、旧バージョンのベースプロジェクトとの互換性はなくなってしまいましたが、CODEMATICをより良いものとする為、これからもいろいろなものを取り入れていきたいと思います。

    feels

    HORIBE'S BLOG

    堀部の記事

    堀部の記事の最新情報をお届けいたします。

    SAME CATEGORY BLOG

    この記事と同様のカテゴリー記事

    日報で業務改善
    はじめました。
    LOADING