2012-01-13 12 views
3

MySQLの選択結果を処理しようとしています。私の問題は、以下のサンプルコードは、文字列型のすべての値を含む配列のみを返します。整数型と浮動小数点型を含む列の場合でもです。mysql_queryはint型/ fload型の文字列型のみを返します

$sth = mysql_query($selectstr); 
$rows = array(); 
while($r = mysql_fetch_row($sth)) { 
    foreach ($r as $value) echo gettype($value), "\n"; 
} 

私は出力でJavaScriptの文字列値を取得$rjson_encode(..)にその配列を渡すと(引用符で囲まれ)ない引用符で囲まれていない数値(私は必要なもの)。

MySQLデータベースにクエリを実行し、正しいタイプの値を含む行配列を取得するにはどうすればよいですか?

更新:第2パラメータmysql_fetch_row(..)が削除されました。もともと私はmysql_fetch_array(..)を使って2番目のパラメータを受け取りました。

答えて

4

mysql_fetch_*関数のどれも、列の型に従って値をキャストしません。いくつかの場合、PHPは一致する内部データ表現を提供しません(考えてください:BIGINT)。

クエリの結果のデータ型がわかっている場合は、それらを手動でキャストする必要があります。そうでなければmysql_field_type()は結果をどのタイプに変換するかのヒントを与えます。次のように私は私のコードを変更最後に

<?php 
$sth = mysql_query($selectstr); 
$rows = array(); 
while($r = mysql_fetch_row($sth,MYSQL_NUM)) { 
    foreach ($r as $key => $value) 
    { 
    if (is_numeric($value)) { 
     $r[$key] = (float)$value; 
    } 
    } 
} 
?> 
0

私はfolowコードを示唆

$sth = mysql_query($selectstr); 
$rows = array(); 
while($r = mysql_fetch_row($sth)) { 
    for ($i = 0; $i < count($r) ; $i++) 
    settype($r[$i],float); 
} 

それは、結果セット内のすべての選択した列に数値が含まれていることを前提としています。

+0

numberを含むカラムがテーブルスキーマによって認識されているので、 'is_numeric() 'によるチェックは省略可能です。 – Robert

+0

BTW: 'mysql_fetch_row()'は[第2パラメータを受け付けません](http://php.net/manual/en/function.mysql-fetch-row.php)。 –

+0

@LinusKleen私はちょうどauhtor投稿からコピーしました –

関連する問題