0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHPでMySQLからデータを取得したときにinteger型が文字列になる問題

Last updated at Posted at 2020-02-26

問題の始まり

とあるSPAな案件をやっていて、慣れているPHPでAPIサーバ作ってやろう!
と初めてのAPIを構築していたところ、データベースからのレスポンスが全部文字列で帰ってくる。

調べてみると、PDOでの解決方法はあれどmysqliはなかなか見つからずどうしたらいいんだ・・・
となったので備忘録がてらメモしておきます。

PDOの場合

PDO::ATTR_EMULATE_PREPARESFALSEにしましょう。
これはプリペアドステートメントをエミュレートモードで使用するというオプションで、デフォルトではTRUEになっています。

この場合、MySQLではなくドライバ側でエスケープ処理などが行われるのですが、
副作用でレスポンスがすべてStringで戻ってくるようになります。(型情報が失われる)

ただし、エミュレーションのほうが早い1ので、オフにする場合は計画的に。

mysqliの場合

MYSQLI_OPT_INT_AND_FLOAT_NATIVETRUEにしましょう。

というよりマニュアルにめっちゃ書いてあります。
コードを書くときはちゃんと公式マニュアルを読むようにしましょう・・・(します)

注意点

こちらもPDOもそうですが、サーバ側がmysqlndに対応していないといけません。
おそらくその辺りの兼ね合いでデフォルトでは無効になっているんでしょうね。

  1. ここここを参照

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?