0

我想从包含两列的数据库 (MyTable) 返回一个 JSON 对象 - ID (int) 和 Name (string)。

下面的脚本生成一个 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 回答