PHPでPDOを使いMySQLのテーブルにアクセスした場合、int型カラムに対しSELECT文を実行すると、サーバーの環境により、int型として返すケースとstring型として返すケースの二通りがあり、WEBアプリ開発において混乱を招きます。
直感的には、int型カラムであるならば、int型を返して欲しいところなのですが、調べた限りでは、強制的にint型として返す手法は、無いようです。
もっとも、PDO::setAttributeの設定で、PDO::ATTR_EMULATE_PREPARESをfalseにすると副作用的にint型を返すのでこの手法が紹介されていることが多いようです。
//プレースホルダのエミュレート機能をオフにする。 $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
しかし、この手法は本来、プリペアドステートメントのエミュレーションを有効または無効にするもので、int型を返すように強制するものではないと思います。
これに対し、string型に強制するようにするメソッドは定められています。
PDO::ATTR_STRINGIFY_FETCHES: フェッチする際、数値を文字列に変換する。boolを必要とする。
これがそうで、trueに設定するとMySQLのカラムの型がint型であっても、string型に変換されて返ってきます。
//int型カラムをstring型で返す $dbh->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true);
ところで、サーバーによって、ATTR_EMULATE_PREPARESによるint型への強制ができるかに違いがでることがあります。sakuraレンタルサーバーのスタンダードでは、int型として取得できますが、コアサーバーでは、int型への強制はできませんでした。
つまり、両サーバーで、このint型の扱いを統一しようとすると、ATTR_STRINGIFY_FETCHESの設定をtrueにして、string型で扱うのが最も簡単な方法のようです。int型に強制するメソッドが備えられていればそれが一番なのですが。
(注意)
その他の方法によってint型に統一できる可能性もあるので、必ずご自身でご確認ください。