Đây là mã có liên quan:PHP & SQL Server - tên trường rút ngắn
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))
Kết quả nên chứa một columnn gọi MEASUREMENT_UNIT
đó (khi tôi làm một print_r
tôi có thể xác minh) sẽ bỏ bớt MEASUREMENT_UNI
mà chỉ là 15 ký tự. Chữ cái cuối cùng T
bị cắt.
Tôi cũng đã cố gắng một truy vấn với một bảng khác nhau và một khác nhau cột trên cơ sở dữ liệu SQL Server như một thử nghiệm để chắc chắn rằng nó không phải là bất kỳ thiết lập lạ với bảng cụ thể hoặc cột mà tôi đang làm việc với. Tôi xác minh cùng một điều xảy ra với một bảng/cột khác nhau: tên cột được cắt bớt tối đa 15 ký tự khi tôi chạy truy vấn chọn như trên.
Tôi cũng đã thử một lựa chọn chỉ định tên trường như select MEASUREMENT_UNIT from from measurements where ID=$id
thay vì select *
nhưng điều đó cũng không giải quyết được sự cố.
Tôi đã xem các bài đăng tương tự khác ở đây về điều này nhưng tất cả dường như chỉ ra rằng tôi sẽ có thể nhận được ít nhất 30 ký tự, không phải giới hạn 15 ký tự mà tôi thấy.
Tại sao tên cột bị cắt bớt thành 15 ký tự?
Chỉnh sửa: Kết nối với cơ sở dữ liệu máy chủ MySQL dường như không dẫn đến cùng một vấn đề. Tên cột DB từ các bảng MySQL không được cắt ngắn dẫn tôi tin rằng đây không phải là vấn đề với 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))
Lưu ý rằng cả hai phần mã trên đã được thử nghiệm trong cùng một tệp trên cùng một máy chủ có cài đặt PHP + ODBC giống nhau.
Có phải 'odbc_fetch_results' là một chức năng tùy chỉnh không? Tôi không thấy nó trong tài liệu PHP. –
@GigaWatt Dường như tôi không suy nghĩ rõ ràng. Tôi đã đăng mã cho hàm 'odbc_fetch_results'. – nmc
Ném vào một 'print_r ($ row);' ngay sau '$ row = odbc_fetch_array ($ stmt);'. Điều đó sẽ cho chúng tôi biết nếu cắt ngắn trong mã của bạn hoặc trong lệnh gọi 'obdc_fetch_array'. –