2016-03-20 23 views
0

Bir PHP sorunu, PDO sorunu veya SQLITE sorunu olup olmadığını bilmiyorum, ancak NUMBER veri türü olan sütunlarda değerler aradığında veya yalnızcasqlite'den tür sayısı değerleri alın - metin alınıyor

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

Bu, benim gerçek sorgu örnek bir koddur:

<?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); 
?> 

ben bu nesneyi almak (... tamsayı, şamandıra) php numarasının dize Istead olarak onları almak, onları bir SUM almak gerçekten daha karmaşıktır ve her alana (yaklaşık olarak 90) tamsayı veya kayan nokta olarak ayrıştırmak istemiyorum çünkü bunlar karma veri türü


DÜZENLEME: VolKerk tarafından belirtildiği gibi, sqlite için PDO'daki uygulanması oldukça zayıftır. Bize biraz ipucu veren $pdostmt->getColumnMeta($intColId) numaralı özelliği test ettim. Onlar sqlite sürücü türlerini sözdizimsel olarak eşleşmediği için, daha fazla bir şey test edeceğim ve ilgilenen herkes varsa, zamana bağlı olarak burada bırakacağım.

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

sonuçları:

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

cevap

0

oracle sqlite3_column_double gibi işlevleri() ya da "doğal" türde bir dizi dönmesine izin sqlite3_column_int() olmasına rağmen, the function behind PDOStatement::fetch() when using the sqlite driver anda sınırlı olduğu NULL, sqlite3_column_blob() ve diğer türler için varsayılan olarak: sqlite3_column_text(). Dolayısıyla, depolama türünün INTEGER, REAL ya da TEXT olmasına bakılmaksızın, ... metni alacaksınız.

Ancak en az PDOStatement::getColumnMeta yerel tür hakkında biraz daha bilgi verebilir. SQLITE_NULL, SQLITE_FLOAT, SQLITE_BLOB, SQLITE_TEXT ve SQLITE_INTEGER arasındaki sqlite driver distinguishes.

+0

senden çok daha fazla. Bu sorunu ele almak için beklemiyordum ... en azından sqlite sql kodu matematik yapar. * deneysel * getColumnMeta'nın umudu pek değişmez ve stabilize olmaz. Hoşçakal! –