問題の始まり
とあるSPAな案件をやっていて、慣れているPHPでAPIサーバ作ってやろう!
と初めてのAPIを構築していたところ、データベースからのレスポンスが全部文字列で帰ってくる。
調べてみると、PDOでの解決方法はあれどmysqliはなかなか見つからずどうしたらいいんだ・・・
となったので備忘録がてらメモしておきます。
PDOの場合
PDO::ATTR_EMULATE_PREPARES
をFALSE
にしましょう。
これはプリペアドステートメントをエミュレートモードで使用するというオプションで、デフォルトではTRUE
になっています。
この場合、MySQLではなくドライバ側でエスケープ処理などが行われるのですが、
副作用でレスポンスがすべてStringで戻ってくるようになります。(型情報が失われる)
ただし、エミュレーションのほうが早い1ので、オフにする場合は計画的に。
mysqliの場合
MYSQLI_OPT_INT_AND_FLOAT_NATIVE
をTRUE
にしましょう。
というよりマニュアルにめっちゃ書いてあります。
コードを書くときはちゃんと公式マニュアルを読むようにしましょう・・・(します)
注意点
こちらもPDOもそうですが、サーバ側がmysqlndに対応していないといけません。
おそらくその辺りの兼ね合いでデフォルトでは無効になっているんでしょうね。