以下是相关代码:
function connect(){
// DB credentials and info defined here....
$connection = odbc_connect("DRIVER={SQL Server Native Client 11.0}; Server=$server; Database=$db;", $loginname, $loginpass);
return $connection;
}
function odbc_fetch_results($stmt, &$results) {
$numrows = odbc_num_rows($stmt);
$row = odbc_fetch_array($stmt);
print_r($row); // Prints: Array ( [MEASUREMENT_UNI] => kg)
if($row){
$results = array ($row);
while( $row = odbc_fetch_array($stmt)){
array_push($results, $row);
}
}
return $numrows;
}
$sql = "select * from measurements where ID=$id";
$stmt = executeSQL($conn,$sql);
$nrows = odbc_fetch_results($stmt, $results);
odbc_free_result($stmt);
print_r($result[0]); // Prints: Array ( [0] => Array ( [MEASUREMENT_UNI] => kg) ) 结果应该包含一个名为MEASUREMENT_UNIT的列,它(当我做print_r时可以验证)被截断为MEASUREMENT_UNI,只有15个字符。最后一个字母T被切断了。
我还尝试在SQL Server数据库上使用不同的表和不同的列进行查询,以确保使用特定的表或列时不会有任何奇怪的设置。我验证了相同的情况发生在不同的表/列中:在运行如上所述的select查询时,列名被截断为15个最大字符。
我还尝试了一个select,它指定了像select MEASUREMENT_UNIT from from measurements where ID=$id这样的字段名,而不是select *,但是这也不能解决这个问题。
我在这里看到了其他类似的帖子,但它们似乎都表明,我应该能够得到至少30个字符,而不是我看到的15个字符限制。
为什么列名被截断为15个字符?
编辑:连接到MySQL服务器数据库似乎不会导致同样的问题。来自MySQL表的DB列名没有被截断,这使我相信这不是ODBC的问题。
$connection = odbc_connect("DRIVER={MySQL};Server=$server; Database=$db;", $loginname, $loginpass);
$sql = "select * from measurements where ID=$id";
$stmt = executeSQL($conn,$sql);
$nrows = odbc_fetch_results($stmt, $results);
odbc_free_result($stmt);
print_r($result[0]); // Prints CORRECTLY: Array ( [0] => Array ( [MEASUREMENT_UNIT] => kg) )请注意,上述两个代码部分都是在同一个服务器上使用相同的PHP + ODBC安装在同一个文件中进行测试的。
https://stackoverflow.com/questions/13849236
复制相似问题