関連するコードは次のとおりです。
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
結果には、15文字のみprint_r
に切り捨てられる(確認できる)という列が含まれている必要があります。MEASUREMENT_UNI
最後の文字T
は切り取られます。
また、テストとして、SQL Serverデータベースの別のテーブルと別の列を使用してクエリを実行し、作業している特定のテーブルまたは列で奇妙な設定が行われていないことを確認しました。別のテーブル/列でも同じことが発生することを確認しました。上記のようにselectクエリを実行すると、列名が最大15文字に切り捨てられます。
select MEASUREMENT_UNIT from from measurements where ID=$id
の代わりにフィールド名を指定するselectも試しましたselect *
が、それでも問題は解決しません。
私はこれについて他の同様の投稿を見ましたが、それらはすべて、私が見ている15文字の制限ではなく、少なくとも30文字を取得できるはずであることを示しているようです。
列名が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がインストールされた同じサーバー上の同じファイルでテストされていることに注意してください。