脱力系備忘録BloG ホーム »PostgreSQLとSQLite3とPDO

PostgreSQLとSQLite3とPDO  

SQLite3のREAL型カラムに、PHPのPDOの「bindParam」を使ってデータをINSERTするとき、データタイプに何を指定すればいいのかを調べるついでに、ちょっと気になったのでPostgreSQLとSQLite3の振る舞いの違いを調べてみた。

テーブルの構造は
カラム「a」「REAL」型
カラム「b」「INTEGER」型
です。

投入するデータは
$a = 10.05 →カラム「a」に投入
$b = 20.05 →カラム「b」に投入
とします。
●SQLite3

bindParam(':A', $a, PDO::PARAM_INT);
bindParam(':B', $b, PDO::PARAM_INT);
の場合、結果は
["a"]=> string(4) "10.0"
["b"]=> string(2) "20"
です。

bindParam(':A', $a, PDO::PARAM_STR);
bindParam(':B', $b, PDO::PARAM_STR);
の場合、結果は
["a"]=> string(5) "10.05"
["b"]=> string(5) "20.05"
です。


●PostgreSQL

bindParam(':A', $a, PDO::PARAM_INT);
bindParam(':B', $b, PDO::PARAM_INT);
の場合、結果は
Invalid text representation: 7 ERROR: invalid input syntax for integer: "20.05"
INSERTエラーです。

bindParam(':A', $a, PDO::PARAM_STR);
bindParam(':B', $b, PDO::PARAM_STR);
の場合、結果は
Invalid text representation: 7 ERROR: invalid input syntax for integer: "20.05"
INSERTエラーです。

そこで、投入するデータを
$a = 10.05
$b = 20
とします。

bindParam(':A', $a, PDO::PARAM_INT);
bindParam(':B', $b, PDO::PARAM_INT);
の場合、結果は
["a"]=> string(5) "10.05"
["b"]=> int(20)
です。

bindParam(':A', $a, PDO::PARAM_STR);
bindParam(':B', $b, PDO::PARAM_STR);
の場合、結果は
["a"]=> string(5) "10.05"
["b"]=> int(20)
です。


という備忘録でした。
関連記事

category: データベース

この記事へのコメント

コメントの投稿

非公開コメント

コメントは全て管理人が内容を確認してから表示されます(非公開コメント除く)。
内容によっては表示されない場合がありますことご了承願います。

プロフィール

お問い合わせ

最新記事

最新コメント

▲ Pagetop