Ecco il codice rilevante:PHP e SQL Server - i nomi dei campi troncati
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))
Il risultato dovrebbe contenere una columnn chiamato MEASUREMENT_UNIT
che (quando faccio un print_r
posso verificare) viene troncato a MEASUREMENT_UNI
che è solo 15 caratteri. L'ultima lettera T
è stata interrotta.
Ho provato anche una query con un diverso tavolo e un diverso colonna sul database di SQL Server come un test per assicurarsi che non era una strana configurazione con la particolare tabella o colonna che sto lavorando con. Ho verificato che la stessa cosa si verifica con una tabella/colonna diversa: i nomi delle colonne vengono troncati a 15 caratteri quando eseguo una query di selezione come sopra.
Ho anche provato una selezione che specifica il nome del campo come select MEASUREMENT_UNIT from from measurements where ID=$id
anziché select *
ma che non risolve il problema.
Ho visto altri post simili a questo proposito ma sembrano indicare che dovrei essere in grado di ottenere almeno 30 caratteri, non il limite di 15 caratteri che sto vedendo.
Perché il nome della colonna viene troncato a 15 caratteri?
Modifica: il collegamento a un database di server MySQL non sembra comportare lo stesso problema. I nomi delle colonne DB delle tabelle MySQL NON sono stati troncati, il che mi porta a credere che questo non sia un problema con il plugin 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))
nota che entrambe le sezioni di codice di cui sopra sono stati testati nello stesso file sullo stesso server con la stessa installazione ODBC PHP +.
È 'odbc_fetch_results' una funzione personalizzata? Non lo vedo nella documentazione di PHP. –
@GigaWatt Sembra che non stavo pensando chiaramente. Ho pubblicato il codice per la funzione 'odbc_fetch_results'. – nmc
Lancia un 'print_r ($ row);' immediatamente dopo '$ row = odbc_fetch_array ($ stmt);'. Questo dovrebbe farci vedere se il troncamento è nel tuo codice o nella chiamata 'obdc_fetch_array'. –