Bài giảng PHP (Hypertext Preprocessing) - Chương 5: PHP & CSDL trình bày các nội dung chính sau: Sử dụng PHP để kết nối với CSDL, PEAR DB, các chức năng nâng cao với PEAR DB,... Mời các bạn cùng tham khảo để nắm nội dung chi tiết.
AMBIENT/
Chủ đề:
Nội dung Text: Bài giảng PHP (Hypertext Preprocessing) - Chương 5: PHP & CSDL
- V. PHP & CSDL
V.1. Sử dụng PHP để kết nối với CSDL
V.2. PEAR DB
V.3. Các chức năng nâng cao với PEAR DB
- V.1. Sử dụng PHP để kết nối với
CSDL
Có 2 cách kết nối PHP với CSDL
– Sử dụng các hàm riêng cho từng loại CSDL
Ưu điểm: Tốc độ cao do được thiết kế cho từng CSDL cụ
thể. Tận dụng được ưu điểm của từng loại CSDL
Nhược điểm: Không có tính khả chuyển giữa các CSDL
– Sử dụng các hàm độc lập CSDL (thư viện PEAR
DB)
Ưu điểm: Có thể sử dụng trên nhiều CSDL khác nhau
Nhược điểm: Chậm hơn phương pháp trên, không tận dụng
được ưu điểm của từng CSDL.
- V.1. Sử dụng PHP để kết nối với CSDL
(2)
Cài đặt thư viện PEAR
– Yêu cầu: PHP phiên bản 5.0
– Cài đặt PHP
– Chạy go-pear.bat
– Theo các hướng dẫn trong chương trình (các tham số chỉ cần đặt mặc
định)
Nếu không cài đặt PEAR, mà copy từ máy khác, phải thêm vào
C:/Windows/PHP.INI 2 dòng như ở dưới
Cấu hình Zend Studio để làm việc với PEAR DB
– Thêm vào file $Zend_dir/bin/php5/php.ini 2 dòng
include_path=".;C:/php/pear"
extension_dir="c:/php/ext"
– Copy file libMySQL.dll vào $Windows/$System (nếu bạn sử dụng IIS)
- Các bước cài đặt kiểu mì ăn liền
Cài IIS, cài Mysql 5.0, cài PHP
Copy $\Mysql\bin\libMysql.dll đến
c:\windows\system32
Copy PHP.rar đè lên thư mục c:/PHP
Sửa nội dung c:\windows\system32\PHP.INI, thêm
vào các dòng sau (để ở cuối file)
include_path=".;C:/php/pear"
extension_dir=" c:/php/ext"
extension=php_mysql.dll
Sau đó, có thể chạy được trên local host (trên Zend
thì phải config thêm, tốt nhất là đừng config)
- V.2. PEAR DB
- V.2. PEAR DB (2)
V.2.1. Data source name
V.2.2. Kết nối với cơ sở dữ liệu
V.2.3. Kiểm tra lỗi
V.2.4. Thực thi query
V.2.5. Lấy kết quả từ query
V.2.6. Giải phóng bộ nhớ
- V.2.1. Data source name
dsn=Data Source Name Type Database
type://username:password@protocol+host Mysql MySQL
spec/database
Pgsql PostgreSQL
Ví dụ:
– mysql:///webdb mysql://localhost/webdb Ibase InterBase
mysql://bondview@localhost/webdb Msql Mini SQL
mysql://bondview@tcp+localhost/webdb
mysql://bondview:007@localhost/webdb Mssql Microsoft SQL Server
oci8 Oracle 7/8/8i
Odbc ODBC
Sybase SyBase
Ifx Informix
Fbsql FrontBase
- V.2.2. Kết nối với cơ sở dữ liệu
Khi đã có DSN, bạn có thể kết nối bằng hàm
DB::connect với cú pháp sau:
– $db = DB::connect(DSN [, options ]);
– options có thể là 1 giá trị Boolean hoặc 1 mảng
$db = DB::connect($dsn, array('debug' => 1,
'optimize' => 'portability'));
- V.2.3. Kiểm tra lỗi
Các phương thức của DB trả về DB_ERROR nếu có lỗi trong
quá trình thực hiện
Bạn có thể kiểm tra 1 kết quả trả về có phải là lỗi không bằng
hàm DB::isError();
Nếu DB::isError() trả về true, kết quả trả về của bạn là lỗi, có
thể xem thông báo lỗi bằng phương thức $tenbien-
>getMessage()
$db = DB::connect($datasource);
if (DB::isError($db)) {
die($db->getMessage( ));
}
- V.2.4. Thực thi query
Để thực thi query, sử dụng phương thức query() của Database
Object (đối tượng trả về khi bạn kết nối thành công với CSDL
bằng hàm DB::connect() );
$db = DB::connect($datasource);
$result = $db->query(sql);
Cũng tương tự như DB::connect(), bạn có thể kiểm tra lỗi bằng
DB::isError()
if (DB::iserror($result)) {
die($result->getMessage());
}
- V.2.5. Lấy kết quả từ query
$row = $result->fetchRow([ mode ]);
Hàm fetchRow() trả về mảng các giá trị trên dòng hoặc
DB_ERROR (nếu có lỗi)
- V.2.5. Lấy kết quả từ query (2)
$row = $result->fetchRow([ mode ]);
mode:
– DB_FETCHMODE_ORDERED: Các cột được liệt
kê trên $row theo thứ tự 0,1,2...
– DB_FETCHMODE_ASSOC : Các cột được liệt kê
với khóa là tên của các cột
– DB_FETCHMODE_OBJECT: Các cột được liệt
kê thành các trường của đối tượng
- V.2.5. Lấy kết quả từ query (3)
- V.2.6. Giải phóng bộ nhớ
- V.3. Các chức năng nâng cao với PEAR
DB
V.3.1. Query template
V.3.2. Prepare/Execute
V.3.3. Các hàm tiện ích
V.3.4. Các thông tin trả về từ query()
V.3.5. Metadata
- V.3.1. Query template
Để xây dựng các query, nếu dùng phép nối xâu kí tự rất dễ gây
nhầm lẫn do không nhìn thấy tổng thể của câu lệnh SQL (nhất là với
các trường hợp có sử dụng dấu nháy)
Trong trường hợp này, PHP cung cấp 1 công cụ hoạt động cho
phép truyền tham số trong câu lệnh SQL giống như lệnh printf, trong
đó sử dụng các ký hiệu
– ?: Cho số hoặc string (dấu nháy sẽ được bổ sung khi cần thiết)
– |: Cho số hoặc string (không sử dụng dấu nháy)
– &: Tên file (dùng cho các trường BLOB)
- V.3.2. Prepare/Execute
Khi bạn thực hiện nhiều câu lệnh giống nhau, cách tốt nhất là dịch câu lệnh SQL trước khi
thực hiện bằng phương thức prepare()
Sau khi dịch SQL, bạn có thể thực hiện câu lệnh SQL bằng cách dùng 2 lệnh sau:
– $response = $db->execute(compiled, values); (values: mảng 1 chiều các giá trị)
– $responses = $db->executeMultiple(compiled, values); (values: mảng 2 chiều các dòng, mỗi dòng là 1
mảng 1 chiều các giá trị)
- V.3.3. Các hàm tiện ích
Ngoài các hàm chung, PEAR DB còn cung cấp các hàm cho phép thực hiện
nhanh 1 số chức năng hay được sử dụng: getOne(), getRow(), getCol(),
getAssoc(), getAll()
- V.3.4. Các thông tin trả về từ query()
Bạn có thể lấy thông tin về các dòng, cột kết quả trả về từ câu lệnh SQL qua
các hàm numRows(), numCols(), tableInfo(), affectedRows()
- V.3.5. Metadata
Hàm getListOf() sử dụng để lấy thông tin về users, databases, tables, views,
functions (phụ thuộc vào sự hỗ trợ của CSDL mà bạn đang sử dụng)