- Giới thiệu SQLSRV, PDO_SQLSRV
- Cài đặt SQLSRV, PDO_SQLSRV
- Cài đặt ODBC Driver
- Cài đặt driver cho PHP
- Kết nối thử PHP đến SQL Server
- Kết nối sử dụng SQLSRV
- Kết nối sử dụng PDO_SQLSRV
Giới thiệu Microsoft Drivers for PHP for SQL Server
Microsoft Drivers for PHP for SQL Server là một phần mở rộng (extension) cho PHP nó cho phép ứng dụng PHP có thể truy vấn đến CSDL MS SQL Server. Extension này cung cấp giao diện truy cập hướng thủ tục với driver SQLSRV và hướng đối tượng với driver PDO_SQLSRV.
Cài đặt SQLSRV, PDO_SQLSRV cho PHP
Để sử dụng được Microsoft Drivers for PHP for SQL Server trước tiên bạn cần cài đặt Microsoft ODBC Driver trên máy (server) chạy PHP. Sau đó mới cài đặt các driver cho PHP.
Cài đặt ODBC Driver for SQL Server
Trên Windows
Bạn tải về phiên bản tương ứng, rồi chạy để cài đặt:
- Download Microsoft ODBC Driver 18 for SQL Server (x64)
- Download Microsoft ODBC Driver 18 for SQL Server (x86)
Tham khảo các phiên bản tại: ODBC Driver for SQL Server
Trên Linux: CentOS/RHEL
sudo su #RHEL / CENTOS 7 curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssql-release.repo #RHEL / CENTOS 8 curl https://packages.microsoft.com/config/rhel/8/prod.repo > /etc/yum.repos.d/mssql-release.repo exit sudo yum remove unixODBC-utf16 unixODBC-utf16-devel sudo ACCEPT_EULA=Y yum install -y msodbcsql18 sudo ACCEPT_EULA=Y yum install -y mssql-tools18 echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc source ~/.bashrc sudo yum install -y unixODBC-devel
Trên macOS
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release brew update HOMEBREW_ACCEPT_EULA=Y brew install msodbcsql17 mssql-tools
Cài đặt Microsoft Drivers for PHP for SQL Server
Trên Windows
Tải về driver tại: Drivers for PHP for SQL Server (Windows).
Giải nén và copy vào thư mục chứa các extension của PHP (ví dụ c:\php\ext). Tìm thư mục này trên Windows bằng lệnh:
php -i | sls extension_dir
Sau đó chính thiết lập PHP nạp driver (xem các driver trong thư mục tải về) bằng cách thêm vào php.ini cấu hình tương ứng với bản PHP (Ví dụ PHP 7.4)
extension=php_pdo_sqlsrv_74_ts_x64.dll extension=php_sqlsrv_74_ts_x64.dll
Trên Linux/CentOS 7
sudo pecl install sqlsrv sudo pecl install pdo_sqlsrv
Thêm vào php.ini thông tin để PHP nạp driver:
extension=sqlsrv.so extension=pdo_sqlsrv.so
Trên macOS
sudo pecl install sqlsrv sudo pecl install pdo_sqlsrv
Thêm vào php.ini thông tin để PHP nạp driver:
extension=sqlsrv.so extension=pdo_sqlsrv.so
Đoạn code kết nối thử PHP đến SQL Server
Chú ý: Nếu sử dụng VSC để viết code, để nó gợi ý các hàm của extension này thì thiết lập như sau: Vào Settings, gõ tìm kiếm cụm từ: @ext:bmewburn.vscode-intelephense-client, dưới mục Stubs bấm vào Add item và chọn thêm: sqlsrv và pdo_sqlsrv
Chuẩn bị SQL Server: bạn cần có một SQL Server đang hoạt động, nếu chưa có có thể nhanh chóng chạy một phiên bản SQL Server trên Docker để thực hành, hãy theo hướng dẫn tại: SQL Server với dữ liệu mẫu
Giả sử SQL Server có các thông tin sau:
- Địa chỉ server: localhost hoặc 127.0.0.1
- Cổng kết nối: 1433
- Tài khoản: sa
- Password: Password123
- CSDL làm việc: xtlab
Sử dụng kết nối hướng thủ tục - SQLSRV
SQLSRV cung cấp các hàm để kết nối và làm việc với SQL Server, danh sách các hàm đó tham khảo tại: SQLSRV Functions
Dưới đây là một ví dụ kết nối và truy vấn dữ liệu SQL Server bằng PHP
Các thao tác như Update, Delete, Insert thực hiện tương tự, bạn chỉ cần viết câu lệnh SQL phù hợp và thực hiện sqlsrv_query
Sử dụng kết nối hướng đối tượng - PDO_SQLSRV
PDO_SQLSRV nó triển khai giao diện PHP Data Objects (PDO) của PHP, cung cấp chức năng truy vấn CSDL theo chuẩn PDO thống nhất (bạn thực hiện kết nối, truy vấn ... giống nhau dù là MySQL, SQLite ...). Bạn làm việc với CSDL thông qua giao lớp PDO.
Các câu truy vấn trả về đối tượng PDOStatement, từ đây gọi các phương thức tương ứng để lấy thông tin
Mặc dù bạn có thể chạy ngay câu truy vấn bằng phương thức PDO::query để trả về PDOStatement, nhưng trong các truy vấn cần truyền tham số - để an toàn bạn nên sử dụng phương thức PDO::prepare PDO::prepare, sau đó truyền tham số với PDOStatement::bindValue
Dưới đây là ví dụ sử dụng PDO_SQLSRV