Bài này là một kinh nghiệm nho nhỏ của tôi trong quá trình thực hiện một số dự án gần đây. Nhiều bạn sẽ cho rằng tôi “điên” nên mới sử dụng SQL Server để làm việc với PHP mà không sử dụng MySQL trong bộ LAMP. Thực ra tôi không điên mà đôi lúc do nhu cầu của dự án hoặc do yêu cầu chuyển đổi dữ liệu từ mã nguồn này sang mã nguồn khác khiến chúng ta phải thực hiện việc thao tác “ngược đời” này. Nhờ vậy, tôi mới có thêm chút kinh nghiệm để chia sẻ với mọi người.
Câu chuyện của tôi bắt đầu cách đây không lâu khi tôi nhận nhiệm vụ chuyển đổi và thiết kế lại cơ sở dữ liệu từ MS SQL Server sang MySQL. May mắn cho tôi là trước đây, thời gian ở trường tôi thường làm việc với cơ sở dữ liệu MS SQL Server 2008 nên việc tương tác với MS SQL Server không khó. Cái khó là thời gian 5 năm qua tôi chưa code một dòng .NET nào nên giờ quên sạch nếu không muốn nói là mù tịt. Thế là đành phải tìm cách sử dụng ngôn ngữ mình biết nhiều nhất(PHP) để làm việc với SQL Server.
Để thao tác với MS SQL Server trên nền PHP, bạn cần phải bổ sung cho PHP của bạn thêm sức mạnh để đọc và hiểu. May mắn cho chúng ta là anh Gate đẹp trai không đến mức ghét PHP nên đã chuẩn bị sẵn cho chúng ta bộ Extension để PHP có thể làm việc được với hệ quản trị cơ sở dữ liệu SQL Server của anh ấy. Trọng tâm của bộ driver này là PDO_SQLSRV giúp đóng vai trò như một API để thao tác với MS SQL Server.
Để PHP có thể thao tác được với SQL Server, bạn cần bổ sung vào thư viện Extension của PHP thêm một bộ Driver tên Microsoft Drivers 3.0 for PHP for SQL Server. Bạn chú ý, chúng ta có 2 version 2.0 và 3.0 của bộ thư viện này. Bộ 3.0 sử dụng cho PHP phiên bản từ 5.3.6 trở về sau. Còn nếu bạn sử dụng phiên bản dưới 5.3.6 thì chúng ta download SQLSRV20.EXE nhé.
Sau khi download về bạn giải nén file và chép tất cả các file DLL nhận được vào thư mục
Ổ_chứa\AppServ\php5\ext\
Đây là thư mục chứa tất cả các Extension của PHP. Ở đây tôi sử dụng AppServ nên đường dẫn của tôi có kiểu như vậy, nếu bạn sử dụng XAMP hoặc WAMP thì đường dẫn có khác tí nhưng tôi chắc rằng bạn sẽ tìm ra nơi chúng ta bổ sung các file Extension mới down về dễ dàng.
Bước tiếp theo, chúng ta cấu hình cho file php.ini để kích hoạt các Extension mới bổ sung như sau:
Bạn mở file php.ini và tìm đến đoạn
[code];extension=php_bz2.dllextension=php_curl.dll[/code]
Bổ sung vào trên nó đoạn code sau:
[code]extension=php_pdo.dllextension=php_sqlsrv_52_ts_vc6.dll
extension=php_pdo_sqlsrv_52_ts_vc6.dll[/code]
Đoạn mã này sẽ giúp cho PHP nhận và sử dụng được các Extension mà chúng ta mới thêm vào như tôi đã nói ở trên.
Vậy là chúng ta đãu hình xong cho PHP. Từ giờ bạn có thể kết nối với MS SQL Server thông qua PHP và bộ driver do Microsoft cung cấp.
Dưới đây là đoạn code mà tôi đã viết để lấy dữ liệu từ MS SQL Server bằng cách sử dụng nhiều quyền truy cập Windows Authentication, hi vọng như một ví dụ cho bạn khi tương tác.
[php]//SQL Server Connector
/* Specify the server and connection string attributes. */
$serverName = "(local)";
$connectionInfo = array( "Database"=>"database_name", "CharacterSet" => "UTF-8");
/* Connect using Windows Authentication. */
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false )
{
echo "Unable to connect.</br>";
die( print_r( sqlsrv_errors(), true));
}
//MySQL Connector
$dbhandle = mysql_connect($hostname, $username, $password)
or die("Unable to connect to MySQL");
$selected = mysql_select_db($mysql_databasename,$dbhandle)
or die("Could not select examples");
$tsql = "SELECT * FROM table_name";
$stmt = sqlsrv_query( $conn, $tsql);
if( $stmt === false )
{
echo "Error in executing query.</br>";
die( print_r( sqlsrv_errors(), true));
}
while( $result = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
echo $result["User"];
}
Ngoài ra bạn có thể tìm thấy rất nhiều sample khác được cung cấp trong Manual đi kèm với gói download mà bạn đã download về.
Ghi lại để nhớ và sử dụng khi cần nhé các bạn.
và hãy comment nếu bạn thấy bài viết này có ích cho bạn.
Ice Spirits says
Anh Nhan cho e hoi chut. E da lam theo huong dan cua A, nhung khi restart lai cai XAMPP thi no toan bao loi, PHP Startup : PDO : unable to initialize module Module compiled with module API=20050922 PHP compiled with module API=20090626 These options need to match. hic, co 1 van de la khi e cai dat SQLSRV20.EXE thi ko thay php_pdo.dll dau ca, nen e phai load tren mang ve bo sung vao ext. A vui long xem gium e loi nay! E xin loi la ko viet dc tieng Viet o phan Cmt nay! E cam on A nhiu ah!
Nguyễn Duy Nhân says
Em phải xem lại em đang sử dụng PHP bao nhiêu để lựa chọn đúng driver nó mới chạy được nhé. Sử dụng phpinfo(); để kiểm tra nhé.
Ice Spirits says
e su dung php 5.3.5 a ah nen e tai bo cai SQLSRV20.EXE ma. a co the xem truc tiep qua team gium e duoc ko ah
Nguyễn Duy Nhân says
Teamview thì chắc là mình ko thể hướng dẫn bạn từng bước một rồi. Bạn xem lại các bước thực hiện có thiếu gì không nhé.
Dao Quoc Hung says
minh cung xai appserv nhung co toi 2 file giong nhau (chi khac ten), php.ini – dist & php.ini – recommended, minh sua ca 2 file luon deu khong dc…hix, reply minh qua dia chi mail nhe ([email protected]) :((
Duy Bình says
Hi bạn,
Mình thử làm như các bạn hướng dẫn nhưng không được. Mình viết code và chạy trên apache, liệu mình có phải dùng IIS để chạy không ? vì mình thấy một số hướng dẫn họ nói phải dùng IIS.
Cảm ơn bạn !
Duy bình says
Bạn ơi, mình làm theo hướng dẫn mà không được. Bạn có thể hướng dẫn chi tiết hơn không ? Sao cái đoạn code kết nối lại vừa kết nối đến SQL Server lại vừa kết nối Mysql ?
Tên vi phạm says
Cho mình hỏi nếu chạy php trên windows độ bảo mật có tốt = linux ko ?
và tốc độ truy vấn my sql có ổn định ko?
thanks
BuiVanChien says
Cho minh hỏi 1 tý đc k. Cái $serverName = “(local)”; là cần điền nội dung gi thế
Dao Quoc Hung says
minh khong the nao ket noi dc…mac du da lam dung nhu ban chi….hix
Dũng says
Anh ơi vì sao sau khi em add extension xong thì kết nối nó bảo Call to undefined function sqlsrv_connect()
Mong anh giúp đỡ
Nguyễn Duy Nhân says
Có thể extension chưa kích hoạt. Bạn thử restart php lại nha
Đình Phạm says
Quá tuyệt vời ạ. ^^ em cảm ơn anh