2016-03-20 8 views
0

PHPの問題かPDOの問題かSQLITEの問題か分かりませんが、データ型がNUMBERの列の値を検索するとsqliteからタイプ番号の値を取得する - テキストを取得する

{ foo: "580", test: 12.50, test2: 666 } 

これは、サンプルコード、私の本当のクエリです:私はこのオブジェクトを取得

<?php 
//... 
$res = $pdo->query("SELECT SUM(id) as 'foo' FROM anytable"); 
$bar = $res->fetch(); //this value should be (int) 
$bar['test'] = 12.50; //this value is (float) 
$bar['test'] = 666; //this value is (int) 
echo json_encode($bar); 
?> 

それらのSUMを取得し、PHPが数(整数、フロート...)の文字列isteadとしてそれらを得る

実際にはもっと複雑で、整数型または浮動小数点型の各フィールド(約90)を解析する必要はありません。データ型が混在しているからです。


EDIT:VolKerkで述べたように、sqliteのためのPDOでの実装はかなり貧弱です。私はいくつかのヒントを与える$pdostmt->getColumnMeta($intColId)の機能をテストしました。構文的にはsqliteドライバの種類と一致しないので、何か興味があれば、何かもっとテストして、ここで時間を置いておきます。

$hints = $pdostmt->getColumnMeta($intColId); 
$coltype = $hints['native_type']; 

結果:

sqlite data type | native_type 
--------------------------------- 
DECIMAL   | 'double' 

答えて

0

"ネイティブ" タイプの範囲を返すことができるようになる(sqlite3_column_double)またはsqlite3_column_int等SQLiteの関数()はあるものの、the function behind PDOStatement::fetch() when using the sqlite driver現在NULLに制限され、sqlite3_column_blob()その他のタイプのデフォルトはsqlite3_column_text()です。したがって、記憶域タイプがINTEGER、REAL、またはTEXTのいずれであっても、...テキストが得られます。

少なくともPDOStatement::getColumnMetaは、ネイティブタイプについてもう少し詳しく説明できます。 SQLite_NULL、SQLITE_FLOAT、SQLITE_BLOB、SQLITE_TEXT、およびSQLITE_INTEGERの間のsqlite driver distinguishes

+0

非常識です。この問題を処理することを期待していない...少なくともsqliteのSQLコードは数学を行う。 *実験的なgetColumnMetaがあまり変化せず、安定することを期待しています。さようなら! –

関連する問題