2015-08-04 22 views
7

Tôi đang cố gắng để kết nối với một cơ sở dữ liệu odbc qua PDO lớp php của:PDO trở về lỗi "không thể tìm thấy tài xế" với một DSN làm việc được biết đến

$dsn = 'odbc:CS_HDZipCodes32bit'; 
$username = 'demo'; 
$password = 'skdemo!'; 

$connection = new PDO($dsn, $username, $password); 

die(var_dump($connection)); 

nhưng khi tôi làm, tôi nhận được lỗi:

Fatal error: Uncaught exception 'PDOException' with message 'could not find driver' in C:\inetpub\wwwroot\pdoClass.php:7 Stack trace: #0 C:\inetpub\wwwroot\pdoClass.php(7): PDO->__construct('odbc:CS_HDZipCo...', 'demo', 'skdemo!') #1 {main} thrown in C:\inetpub\wwwroot\pdoClass.php on line 7

Giá trị $dsn là tên của DSN mà tôi đã tạo trong Trình quản lý ODBC của mình.

odbc manager's dsns

Tôi biết DSN đặc biệt này hoạt động bởi vì tôi đã có thể xây dựng một tệp trình diễn và kết nối thành công qua odbc_connect:

$connection = odbc_connect("CS_HDZipCodes32bit", 'demo', 'skdemo!'); 

if(!$connection){ 
    die('connection failed'); 
} 

$statement = "SELECT * FROM ZipCodes"; 

$result = odbc_exec($connection, $statement); 


// Outputs the zips as expected 
var_dump(odbc_result_all($result)); 

Tôi đã đào qua các tài liệu PDO-ODBC cũng như khác tài nguyên trực tuyến, nhưng tôi không thể tìm ra lý do tại sao PHP không thể tìm thấy trình điều khiển khi thử từ PDO.

Bất kỳ ý tưởng nào?

Cập nhật

tôi bật mở trang phpinfo của tôi để đảm bảo người lái xe odbc được cài đặt cho mỗi bình luận Marc B:

odbc in phpini

Dường như trình điều khiển được cài đặt trừ khi đây là một trình điều khiển khác nhau .

Cập nhật Một

On kiểm tra hơn nữa phpini tôi mỗi bình luận thêm Marc B, có vẻ như tôi không có cài đặt trình điều khiển cụ thể POD ODBC:

enter image description here

Vì vậy, ở đây, nếu Tôi đã có trình điều khiển ODBC cho pdo cài đặt, odbc sẽ ở cuối danh sách, đúng không?

+0

bạn đã thử odbc_connect trên dsn "xấu" của bạn? –

+0

Có, khối mã ở dưới cùng là tôi sử dụng cùng một dsn từ trên cùng với odbc_connect. –

+0

ok, sau đó bạn đã kiểm tra xem trình điều khiển pdo odbc đã được cài đặt chưa? pdo có trình điều khiển riêng của nó, và không chỉ là "bọc" các hàm 'odbc _ *()'. –

Trả lời

7

Sau khi nhận được sự trợ giúp tuyệt vời từ Marc B trong phần bình luận của câu hỏi ban đầu, vấn đề là do sự hiểu lầm của tôi về việc bật odbc trên máy chủ web của tôi và cài đặt trình điều khiển pdo_odbc.

Trong khi tôi đã bật odbc trên máy chủ web, tôi chưa cài đặt trình điều khiển odbc cho PDO.

missing odbc driver

Trình điều khiển này là cần thiết để có thể truy cập cơ sở dữ liệu odbc qua pdo.

Theo tài liệu php.net trên installing pdo cho cửa sổ, trình điều khiển đã được bao gồm trong bản dựng php (Tôi đang sử dụng phiên bản 5.5) và chỉ cần đưa vào tệp php.ini.

including php_pdo.dll

Sau khi thêm tài xế và khởi động lại máy chủ bây giờ tôi đã có trình điều khiển nạp:

enter image description here

và truy vấn thử nghiệm của tôi sử dụng PDO trên cơ sở dữ liệu bản demo của tôi làm việc:

$dsn = 'odbc:CS_HDZipCodes32bit'; 
$username = 'demo'; 
$password = 'skdemo!'; 

$connection = new PDO($dsn, $username, $password); 

$query = "Select * FROM ZipCodes"; 


$result = $connection->query($query); 

foreach($result as $row){ 
    var_dump($row); 
} 

Dumps ra:

pdo var dump

Nhờ sự giúp đỡ của bạn Marc B.

Các vấn đề liên quan