0

ID(int)とName(string)の2つの列を含むデータベース(MyTable)からJSONオブジェクトを返したいです。

以下のスクリプトは、次のようなJSONを生成します。

[{"ID":"0","Name":"John"},{"ID":"1","Name":"Doe"}]

IDが文字列として返されることがわかります。IDが整数として返されるようにするにはどうすればよいですか?

[{"ID":0,"Name":"John"},{"ID":1,"Name":"Doe"}]

次のような一般的なクエリを使用したいので、ODBCから結果配列を読み取って解析したくありません。

SELECT * FROM TableXXX

これが私のスクリプトです:

    //connection
    $connstr = "Driver={SQL Server Native Client 10.0};Server=" . $this->server . ";Database=" . $this->database . ";"; 
    $conn=odbc_connect($connstr, $this->user, $this->password);
    if (!$conn) {exit("Connection Failed: " . $conn);}

    //execute sql
    $rs=odbc_exec($conn,"SELECT ID, Name FROM MyTable");
    if (!$rs) {exit("Error in SQL");}
    //retreive data into array
    $data = array();
    $i=0;
    while( $row = odbc_fetch_array($rs) ) {
        $data[$i] = $row;
        $i++;
    } 
    odbc_close($conn);
    //output as json string
    echo json_encode($data);
4

2 に答える 2

0

一般に、ODBCには一般的なデータ型はありません。個々のODBCドライバーに依存します(サポートされている場合は、ベンダーごとに異なる可能性があります)。「一般的な」データ型名を記述しているODBC仕様には何も見ていません。ODBCへのほとんどの呼び出しはODBCドライバーマネージャーを経由しますが、通過するSQLステートメントの変換/変更を実行する状況を認識していません。

これは、ODBCドライバーがデータ型を返さないことを意味します。文字列以外のJSONオブジェクトを返す場合は、データを列ごとに個別にマッピングする必要があります。odbc_field_type関数を使用して、フィールドのデータ型を取得できます。

ただし、各データベースベンダーが異なるフィールド名(varchar、nvarcharなど)を返すことを知っておく必要があります。

次に、次のようなものを使用します(逆の順序で):

$type_map = array(
'varchar' => 'string',
'char' => 'string',
'text' => 'string',
);

$column_type = 'text'; // get from DB query
$my_var = 'some string';
$var_type = gettype($my_var);

if(array_key_exists($column_type, $type_map) and
   $type_map[$column_type] == $var_type) {
   //proceed with insert of record
}

それが役に立てば幸い。

于 2012-04-12T06:55:18.283 に答える
0

すべてのODBCドライバーは、ODBCコアデータ型をサポートする必要があります(以下のURLの表19.6にリストされています)。表19.6のデータ型は、すべてのODBC準拠ドライバーに共通です。

SQLプログラミング

于 2015-10-31T16:57:00.843 に答える