Вот соответствующий код:
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 в качестве теста, чтобы убедиться, что это не была какая-то странная настройка с конкретной таблицей или столбцом, с которой я работаю. Я проверил, что то же самое происходит с другой таблицей/столбцом: имена столбцов усекаются до 15 символов при запуске запроса выбора, как указано выше.
Я также попробовал select, который задает имя поля типа select MEASUREMENT_UNIT from from measurements where ID=$id
вместо select *
, но это также не решает проблему.
Я видел другие подобные сообщения здесь об этом, но все они, похоже, указывают, что я должен иметь возможность получить как минимум 30 символов, а не 15-символьный лимит, который я вижу.
Почему имя столбца усечено до 15 символов?
Изменить: подключение к базе данных сервера MySQL, похоже, не привело к такой же проблеме. Имена столбцов DB из таблиц MySQL НЕ были усечены, что заставляет меня думать, что это не проблема с плагином 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.