Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

php データ型について

解決したいこと

htmlのformタグの中にtype=daytaime_localのinputを設定して、ブラウザで入力してもらった値をSQLiteに入れるところで質問があります。
SQLiteのフィールドにはすでにinteger型のフィールドを追加しています。
daytime_localの中身(POSTされてきた値)をそのままデータベースに入れると
2021-08-24T14:23
といった形で入るのですが、整数以外(-やTなど)が含まれているため、integerには入らないのでなにかしらのエラーが出るのかなと思ったのですがそのまま入ってしまいました。
phpは動的型付け言語なのでデータ型を文字列からintegerに変換してくれている(かもしれない)のはわかるのですが整数以外も使われているのになぜデータに登録できてしまうのでしょうか?

ちなみに、データをvar_dumpで取り出すとstringで返ってきます

予想している理由

・integerは「符号付整数」であるが実は文字も登録できる
・integerという設定を無視して文字列stringで入っている

文字ばかりの質問で見にくくてすいません。

0

1Answer

それは PHP ではなく SQLite3 の性質です。 SQLite3 はカラムの型をある種のヒントとして扱います。 INTEGER 型のカラムに文字列を入れたとき、整数としてパースできるなら整数に変換して保存されますが、パースできなければ文字列がそのまま保存されます。

参考 https://www.sqlite.org/datatype3.html#type_affinity

1Like

Comments

  1. @voyce_sakamoto

    Questioner


    パースできないと文字列そのまま入っちゃうんですね。
    「ヒントとして」っていうのがわかりやすかったです。
    ありがとうございました。

Your answer might help someone💌