2012-06-18 25 views
10

Tôi đang cố gắng sử dụng Doctrine 2 (cho Symfony 2) để kết nối với MSSQLServer từ máy linux.Kết nối Doctrine 2 với MSSQL Đối với SYMFONY 2 Trên Linux

Tôi đã cài đặt pdo_dblib (Trình điều khiển PDO cho FreeTDS/Sybase DB-lib) và có thể kết nối với máy chủ db qua tsql trên dòng lệnh và từ php cli. Vì vậy, tôi biết điều này đang làm việc.

Trong Symfony/app/config/file parameters.ini của tôi, tôi đã xác định database_driver = "pdo_sqlsrv" như trình điều khiển cơ sở dữ liệu (như tôi đọc rằng điều này sẽ được xử lý bởi db_lib) nhưng khi cố gắng để chạy một lệnh create database (sử dụng lệnh) tôi nhận được lỗi:

Could not create database for connection named could not find driver

sau đó tôi đã thay đổi tài xế database_driver="pdo_dblib" và bây giờ tôi nhận được lỗi:

[Doctrine\DBAL\DBALException]
The given 'driver' pdo_dblib is unknown, Doctrine currently supports only the following drivers: pdo_mysql, pdo_sqlite, pdo_pgsql, pdo_oci, oci8, ibm_db2, pdo_ibm, pdo_sqlsrv

Vì vậy, có vẻ như để kết nối với MSSQL duy nhất của tôi tùy chọn là pdo_sqlsrv, vì vậy tôi đã đi để cài đặt này. Tuy nhiên, I have just discovered here, mà

The PDO_SQLSRV extension is only compatible with PHP running on Windows.

Do đó, người lái xe được hỗ trợ bởi giáo lý và những người có sẵn để sử dụng trên Linux dường như exlusive lẫn nhau. Từ tìm kiếm tôi đã không tìm thấy bất kỳ trường hợp của vấn đề này đang được giải quyết cho đến nay (Một anh chàng đánh dấu vấn đề là giải quyết, nhưng khi tôi đọc các chủ đề ông đã chỉ đơn giản là chuyển env dev của mình vào một hộp cửa sổ ... không chính xác những gì tôi đã có trong tâm trí!).

+0

Vui lòng xem tại đây: http://stackoverflow.com/questions/8492941/doctrine-2-how-to-add-custom-dbal-driver và để lại tin nhắn nếu câu trả lời không được chấp nhận đã giúp bạn. – hakre

+0

Xin chào Hakre, Cảm ơn bạn đã trả lời. Tôi đã đọc bài đăng của bạn và hiểu những gì bạn mô tả, nhưng bạn đã học lớp này ở đâu? driver_class: Doctrine \ DBAL \ Driver \ MsSql \ Driver Bạn có phải sao chép thủ công từ đâu đó không? Như đã đề cập, tôi đang sử dụng pdo_dblib. Rob Ganly –

Trả lời

8

Theo Linux (ít nhất là bản phân phối dựa trên Debian), php cần gói php5-sybase mang lại hỗ trợ cho Sybase và MSSql.

Nếu bạn đang sử dụng một bản phân phối dựa debian bạn sẽ muốn làm

$ sudo apt-get install php5-sybase 
$ sudo service apache2 restart 

php -r "phpinfo();" | grep "PDO drivers" 

sẽ cho bạn

PDO drivers: dblib, mysql, sqlite, ...

dblib thực sự là một trong những chúng ta cần

Bây giờ để có thể sử dụng trình điều khiển này với Doctrine, bài đăng này: Doctrine 2 - How to add custom DBAL driver? đã giúp tôi tìm câu trả lời.

OP đề xuất sử dụng bundle on git làm cho mọi thứ hoạt động cùng nhau.

+0

Cảm ơn Pierre, tôi đã tìm thấy bài đăng bạn đã đề cập đến khi thêm trình điều khiển DBAL tùy chỉnh. Tôi cũng đã đến giai đoạn mà tôi đã nhận được lỗi được đề cập trong bài đăng đó, tức là "trình điều khiển" đã cho 'pdo_dblib không xác định ".Thấy rằng nó không được hỗ trợ 'out of the box' bởi doctrine2 Tôi không chắc liệu có vấn đề gì tiếp theo không nếu tôi thực hiện sửa đổi này, vì vậy chúng tôi đã không * cần * để sử dụng MSSQL cho dự án. Tôi đã sử dụng MySQL thay vào đó, và điều này tỏ ra không có vấn đề. Có vẻ như những người khác cũng có giải pháp đó, nên tôi sẽ chấp nhận câu trả lời của bạn. Cảm ơn một lần nữa! Rob Ganly –

+0

Đó chắc chắn là một ý tưởng tốt hơn để sử dụng MySQL hoặc Postgre. Tôi thực sự đã phải sử dụng MSSQL như một kết nối thay thế để đọc dữ liệu bên ngoài. –

+0

Có chắc chắn sẽ có ý nghĩa hơn khi sử dụng MySql với PHP và Doctrine 2/Symfony 2, điều này đã được hiểu và xem xét trước khi bắt đầu dự án. Tuy nhiên nhìn thấy nó có nghĩa là đi ngược lại hiện trạng của môi trường phát triển và sản xuất ở đây, tôi quyết định loại bỏ lộ trình MSSQL. Tuy nhiên, khi những vấn đề này trở nên hiển nhiên, một quan điểm đo được thực hiện và tuyến đường này bị bỏ hoang. Đó là cuộc đời của một nhà phát triển! Hoạt động tốt với MySQL ngay bây giờ! Cảm ơn vì đầu vào của bạn. :) Rob Ganly –

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