【MySQL】PDOで数値を取ってきても、全部文字列になる件

プログラミング

どうも、コウイチです。

 

今回は、PHPでPDOを使用して、テーブルからint型の値を取り出してくるサンプルを見てみます。

これが、なかなか挙動が変だったのです。

 

次のコードを見てください。

サンプルコード

pdo_stringテーブルのsuujiというカラム(int型)に、3という数値がひとつだけ入っています。

この3をPDOで取り出しているのですが

 

実行結果:3は3ではありません。

 

という結果に。

 

いや明らかに3だろうがあwww

と、格闘しておりました。

 

どうやらPDOでテーブルから取り出した値は、全部文字列になるようですね。

 

だから 文字列 === 数値 の比較でfalseになるわけです。

 

この場合ですが、3を文字列として囲み、

if($rec[‘suuji’] === ‘3’){

とすれば正常に判定できます。

PDOのプリペアドステートメントエミュレートモードが原因らしい

それでは、何が原因なんでしょうか?

なんでPHPはMySQLからのリザルトがint型のはずなのにstring型になってしまうん?

こちらのサイトによると、PDOはデフォルトでプリペアドステートメントエミュレートモードになっているらしく、それが原因でこういった現象が起こるとのこと。

 

ただし、僕はこの挙動が分かってPHP側で対策してしまったので、深くは調査していません。

 

興味があれば調べてみてください。

 

ちなみに、バインドパラメータについても、文字列として扱われるようです。

PHP: PDOStatement::execute – Manual

実行される SQL 文の中のバインドパラメータと同数の要素からなる、 値の配列。すべての値は PDO::PARAM_STR として扱われます。

こちらも注意が必要ですね。

まとめ

デフォルトでこうなっている可能性が高いのに、意外とあまり騒がれていないものなんですね。

でも思わぬバグに繋がりかねません。頭の隅に入れておきましょう。

 

ではまた。

スキルに自信がない20代でも、フリーランスになって月50万以上を稼げます。

最後に僕の実体験から、プログラマーが最も簡単に収入を上げる方法をお伝えします。

それは、フリーランスになることです。

 

エンジニアだったら誰でもフリーランスになれます。

業務経験が1年もあれば、月収50万が狙えます。

 

信じられないかもしれませんが、

フリーランスというのは稼げる働き方なのです。

 

僕は正社員でプログラマーをしていたのですが、

・終電帰りが当たり前
・上司に毎日怒鳴られる。
・手取り16万

という地獄のような環境が耐えられなくなり、

フリーランスになったら月収がいきなり60万になりました。

 

正直僕なんか、大したスキルはありません。

いつも下っ端の下請けプログラマーでした。

 

なのに収入は3倍になりました。

自信と健康とお金を手に入れることができました。

 

いつまでたっても上がらない正社員の給料にイライラしている方は、

是非フリーランスにチャレンジしてください。

 

プログラマーが最速で月収を上げる方法です。

 

・フリーランスなんて不安定じゃん。仕事見つからなかったらどうするの?

・仕事探しがだるい。

・転職活動なんかする暇ないんだよ

・俺のスキルじゃ無理なんだよ

 

僕もそう思ってビビってました。

ですが、思った以上に簡単でした。

 

思い込みというのは本当に恐ろしいです。

やれば行ける世界です。

 

そんな僕がフリーランスになって、

3年間働いても上がらなかった給料を、

一瞬で3倍に上げた方法を、以下の記事で書いています。


【月収20万円⇒月収60万円】価値ナシ貧乏プログラマーの僕が、7日間で収入が3倍になった物語

プログラミング
衣食住よりプログラミング

コメント

タイトルとURLをコピーしました