Tôi đang cố gắng đọc từ cơ sở dữ liệu Access bằng cách sử dụng các trình điều khiển MDBTools để thực thi odbc_connect
trên Ubuntu 11.10. Nó hoạt động tốt khi sử dụng thiết lập DSN trong /etc/odbc.ini
.Kết nối DSN-less với ODBC PHP bằng MDBTools Driver
Dưới đây là nội dung của /etc/odbc.ini
:
[logindb]
Description = Microsoft Access Try DB
Driver = MDBToolsODBC
Database = /home/folder1/TestDb.mdb
Servername = localhost
Thuộc tính điều khiển trong tài liệu tham khảo odbc.ini
MDBToolsODBC
, vì vậy, đây là thiết lập của tôi odbc trong /etc/odbcinst.ini
:
[MDBToolsODBC]
Description = MDB Tools ODBC
Driver = /usr/lib/libmdbodbc.so.0
Setup =
FileUsage =
CPTimeout =
CPReuse =
Vấn đề của tôi là, khi sử dụng $conn = odbc_connect('logindb','','');
, Tôi phải sử dụng giá trị hardcoded cho vị trí cơ sở dữ liệu. Lý tưởng nhất, tôi muốn chỉ định tham số đầu tiên của odbc_connect
sử dụng kết nối DSN-less, do đó tệp cơ sở dữ liệu của tôi có thể là một biến (sẽ được đọc từ các dbs khác nhau). Một cái gì đó như:
if ($cond1) {
$db = "/home/folder1/TestDb.mdb";
} else {
$db = "/home/folder1/TestDb2.mdb";
}
$conn = odbc_connect("odbc:Driver={MDBToolsODBC};Dbq=$db",'','');
Tôi cũng đã thử nó mà không có tiền tố odbc: nhưng nó không hoạt động. Bất cứ ai có thể cho tôi biết lý do tại sao chỉ định DSN hoạt động, nhưng khi cố gắng xác định nó trên bay bằng cách sử dụng những gì trông giống như các thuộc tính tương tự, nó không hoạt động? Tôi nghĩ rằng nó đã làm với các tham số và nội dung của tham số đầu tiên trong kết nối DSN-ít hơn. Như mọi khi, bất kỳ trợ giúp nào cũng được đánh giá cao.
@Rocket: Sau khi tên biến trong '/etc/odbc.ini ', không phải là 'Cơ sở dữ liệu = $ db'? – eggyal
@eggyal: Điều đó cũng không giúp được gì. Nó vẫn nói: 'Lỗi SQL: [unixODBC] [Trình quản lý trình điều khiển] Không tìm thấy tên nguồn dữ liệu và không có trình điều khiển mặc định nào được chỉ định'. –
@Rocket: Và nếu bạn chỉ định rõ ràng 'Driver =/usr/lib/libmdbodbc.so.0'? – eggyal