2012-04-10 61 views
0

我想從包含兩列 - ID(int)和Name(字符串)的數據庫(MyTable)返回一個JSON對象。返回正確值類型的PHP ODBC連接

下面的腳本產生像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); 

回答

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 
} 

希望它能幫助。

0

每個 ODBC驅動程序必須支持ODBC核心數據類型(在下面的URL中列出在表19.6中)。所有符合ODBC的驅動程序都使用表19.6中的數據類型。

SQL Programming