PostgreSQLとSQLite3とPDO 
2013/10/31 Thu.
SQLite3のREAL型カラムに、PHPのPDOの「bindParam」を使ってデータをINSERTするとき、データタイプに何を指定すればいいのかを調べるついでに、ちょっと気になったのでPostgreSQLとSQLite3の振る舞いの違いを調べてみた。
テーブルの構造は
カラム「a」「REAL」型
カラム「b」「INTEGER」型
です。
投入するデータは
$a = 10.05 →カラム「a」に投入
$b = 20.05 →カラム「b」に投入
とします。
テーブルの構造は
カラム「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)
です。
という備忘録でした。
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: データベース
この記事へのコメント
コメントの投稿
コメントは全て管理人が内容を確認してから表示されます(非公開コメント除く)。
内容によっては表示されない場合がありますことご了承願います。
内容によっては表示されない場合がありますことご了承願います。