mysqlndが有効にならない?
PHP5.5以降から、php-mysqlをyumインストールすると、php-mysqlnd
も一緒にインストールされます。
mysqlndが入っていると、DBからデータを取り出した際に、
int型で定義されているカラムのデータはintとして、
string型で定義されているカラムのデータはstringとして取り出すことができます。
今回、PHP5.6の環境で、mysqlndがインストールされていて、
モジュールが有効になっていることを確認できました。
下記の通り、DBからフェッチした値をvar_dump()したところ、
intで定義しているカラムがstringで出力されてしまいました。
object(stdClass)[25] public 'user_id' => string '1' (length=1) public 'delete_flag' => string '0' (length=1) ...
案件によっては、intで定義しているものはintで出力したい
という場合も
まず確認すること
本当にmysqlnd入ってる?
$ php -m | grep mysqlnd mysqlnd # 出て来ればOK
本当にmysqlnd有効になってる?
$ php -i | grep mysqlnd /etc/php.d/20-mysqlnd.ini, ~~~~ mysqlnd => enabled # enabledが出て来ればOK ~~~~
じゃあ何が悪いか
実装です。(キリッ
PDO接続時のオプション ATTR_EMULATE_PREPARES をオフにする必要がありました。
$attrs = array(PDO::ATTR_EMULATE_PREPARES => false); $pdo = new PDO($dsn, $username, $password, $attrs);
これで先ほどのvar_dump()を出力してみると…
object(stdClass)[25] public 'user_id' => int 1 public 'delete_flag' => int 0 ...
ちゃんとintになって出力されました。