X. Các hàm API trong PHP 1 Giới thiệu về MySQL
2. Các hàm cơ bản làm việc với cơ sở dữliệu MySQL.
a) Các hàm kết nối đến MySQL Server
PHP cung cấp hai hàm để kết nối với cơ sở dữ liệu MySQL : mysql_connect và mysql_pconnect .
+ mysql_connect () : hàm này sẽ tạo ra một liên kết tới máy chủ
MySQL .
Cú pháp :
int mysql_connect (string [hostname [:port] [:/path_to_socket]], string [username], string [password]);
Trong đó :
- hostname : Tên máy chủ cơ sở dữ liệu, nơi trang web sẽ chứa cơ sở dữ liệu. Giá trị ngầm định là “localhost’”
- :port : Địa chỉ cổng, nơi bộ máy cơ sở dữ liệu lắng nghe yêu cầu. Giá trị ngầm định là “:3306” .
- :/path_to_socket : Cũng giống nh− :port nh−ng chỉ cho hệ điều hành UNIX. Giá trị ngầm định là “:/tmp/mysql.sock” .
- username : Tên của ng−ời sử dụng đ−ợc phép kết nối vào bộ máy cơ sở dữ liệu.
- password : Mật khẩu của ng−ời sử dụng để kết nối vào bộ máy cơ sở dữ liệu.
Hàm này trả về mã số nhận dạng nếu kết nối thành công, giá trị 0 (false) nếu việc kết nối có lỗi. Mã số nhận dạng này sẽ đ−ợc sử dụng cho tất cả các yêu cầu tới bộ máy cơ sở dữ liệu sau này.
Sự kết nối này sẽ đóng lại khi gọi hàm mysql_close() hoặc kết thúc đoạn PHP script.
+ mysql_pconnect() : Hàm này tạo ra một liên kết bền vững với máy
chủ MySQL.
Cú pháp :
int mysql_pconnect (string [hostname [:port] [:/path_to_socket]], string [username], string [password]);
Tham số và giá trị trả về của hàm này cũng giống hàm
mysql_connect(). Sự khác biết giữa hai hàm này là liên kết tới máy chủ MySQL không bị đóng lại kể cả khi kết thúc kịch bản (script) PHP hay gọi hàm mysql_close(). Mục đích của hàm này là luôn luôn duy trì liên kết tới máy chủ MySQL do luôn có sự yêu cầu tới máy chủ, tránh cho máy chủ phải tìm kiếm mã số nhận dạng mới từ đó giảm thời gian truy cập .
Chú ý : hàm này chỉ thực hiện đ−ợc khi PHP đ−ợc định cấu hình nh−
là một module của Web server .
+ mysql_close() : Hàm này huỷ bỏ sự kết nối tới máy chủ MySQL .
Cú pháp :
int mysql_close(int [link_identifier]);
Tham số link_identifier là mã số nhận dạng tạo ra bởi hàm
mysql_connect(). Hàm trả về là True nếu thành công, ng−ợc lại là False . b) Các hàm thao tác trên CSDL
+ mysql_create_db() : Hàm tạo cơ sở dữ liệu
Cú pháp :
int mysql_create_db(string name, int [link_identifier]) ; Trong đó :
- string name : Tên của cơ sở dữ liệu cần tạo.
- int link_identifier : Mã số nhận dạng đ−ợc cấp bởi hàm mysql_connect() .
Chúng ta hoàn toàn có thể gửi câu lệnh SQL để tạo cơ sở dữ liệu thông qua hàm mysql_query() .
+ mysql_drop_db() : Hàm xoá cơ sở dữ liệu
Cú pháp :
int mysql_drop_db(string name, int [link_identifier]); Trong đó :
- string name : Tên của cơ sở dữ liệu cần xoá .
- int link_identifier : Mã số nhận dạng đ−ợc cấp bởi hàm mysql_connect() .
Chúng ta hoàn toàn có thể gửi câu lệnh SQL để xoá cơ sở dữ liệu thông qua hàm mysql_query().
+ mysql_select_db() : Hàm cho cơ sở dữ liệu hoạt động .
Cú pháp :
int mysql_select_db(string database_name, int [link_identifier]); Trong đó:
- database_name : Tên của cơ sở dữ liệu mà sau này các hàm API khác của PHP sẽ thực hiện trên đó.
- int link_identifier : Mã nhận dạng đ−ợc cấp bởi hàm mysql_connect(). Câu lệnh này sẽ gắn tên cơ sở dữ liệu với mã nhận dạng, sau này khi làm việc với link_identifier sẽ bao gồm cả cơ sở dữ liệu đ−ợc chọn . c) Các hàm thao tác trên dữ liệu
+ mysql_query() : Hàm gửi câu lệnh SQL tới máy chủ MySQL .
Cú pháp :
int mysql_query(string query, [int link_identifier]) ;
Trong đó :
- string query : Câu lệnh SQL cần gửi tới máy chủ MySQL .
- int link_identifier : Mã số nhận dạng, nó phải đ−ợc thực hiện trong hàm mysql_select_db() tr−ớc đó .
+ mysql_db_query() : Hàm gửi câu lệnh SQL tới máy chủ MySQL .
int mysql_db_query(string database, string query, int
[link_identifier]);
Trong đó :
- string database : Tên cơ sở dữ liệu câu lệnh SQL sẽ thực hiện trên đó. - string query : Câu lệnh SQL cần thực hiện .
- link_identifier : Mã số nhận dạng đ−ợc cấp bởi hàm mysql_connect() Hàm này chỉ rõ câu lệnh đ−ợc thực hiện trên cơ sở dữ liệu nào nên tr−ớc đó không cần thực hiện hàm mysql_select_db();
+mysql_insert_id() :
Hàm lấy giá trị đ−ợc sinh ra từ câu truy vấn INSERT trớc
Cú pháp :
int mysql_insert_id([link_identifier]) ;
trong đó:
int link_identifier : Mã số nhận dạng đ−ợc cấp bởi hàm mysql_connect() .
Hàm này trả về giá trị id đ−ợc sinh ra trong cột AUTO_INCREMENT bởi câu truy vấn tr−ớc đó. Điều này chỉ có tác dụng trên link_identifier đ−ợc chỉ ra trong hàm, nếu gọi hàm trên mà không chỉ định tham số link_identifier
thì liên kết đ−ợc mở cuối cùng sẽ đ−ợc chỉ định.
Hàm mysql_insert_id() trả về giá trị 0 nếu câu truy vấn tr−ớc đó không sinh ra một giá trị AUTO_INCREMENT. Nếu ta muốn giữ lại giá trị cho lần sau, thì phải gọi hàm này ngay sau câu truy vấn sinh ra giá trị .
+ mysql_fetch_row() :
Hàm trả về một mảng là giá trị của một bảng ghi hiện tại với chỉ số là số thứ tự của các tr−ờng (chỉ số bắt đầu từ 0). Sau đó hàm sẽ trỏ tới bảng ghi tiếp theo cho tới khi gặp bảng ghi cuối cùng hàm trả về giá trị false. Để truy xuất tới các giá trị của cột ta viết : tên_mảng[số thứ tự]
Cú pháp :
Trong đó : result_identifier là mã số trả về của hàm mysql_query() hoặc mysql_db_query() .
Ví dụ :
<?php
$mysql = “select id, name from ds_thanhvien”; // cau lenh SQL $link = mysql_connect($host, $user, $password); //lay ma mysql_select_db($database_name, $link);
$result = mysql_query($mysql ,$link); while ($row = mysql_fetch_row($result))
{ echo $row[0] ; echo $row[1]; } ?> + mysql_fetch_array() :
Hàm trả về một mảng là giá trị của một bảng ghi hiện tại, sau đó hàm sẽ trỏ tới bảng ghi tiếp theo cho tới khi gặp bảng ghi cuối cùng hàm trả về giá trị false.
Cú pháp :
array mysql_fetch_array( int result_identifier [, int result_type]);
Trong đó : result_identifier là mã số trả về của hàm mysql_query() hoặc mysql_db_query() .
Để truy xuất đến các thành phần của cột : tên_biến_mảng[“tên_trờng”];
result_type là một hằng số có thể nhận các giá trị sau:
-MYSQL_NUM : chỉ trả lại một mảng chứa các chỉ số là số (giống nh− hàm mysql_fetch_row() )
-MYSQL_BOTH : trả lại mảng chứa đựng các chỉ số gồm cả các con số và chỉ số liên kết .
Hàm này là sự mở rộng của hàm mysql_fetch_row(). Nó cho phép truy cập tr−ờng dữ liệu của mảng kết quả không chỉ thông qua các chỉ số là các số mà chúng có thể là tên của các tr−ờng dữ liệu. Điều này làm cho việc lập trình đơn giản và chính xác hơn.
Ví dụ: <?php
$mysql = “select id, name from ds_thanhvien”; $link = mysql_connect($host, $user, $password); $result = mysql_db_query(“php”, $mysql); while ($row = mysql_fetch_array($result)) {
echo “user_id: “. $row[“id”] .“<BR>\n”; echo “user_id: “. $row[0] .“<BR>\n”;
echo “user_name: “. $row[“name”] .“<BR>\n”; echo “user_name: “. $row[1] .“<BR>\n”;
}
mysql_free_result ($result); ?>
+ mysql_fetch_object() : Hàm trả về một đối t−ợng là giá trị của một bảng ghi hiện thời. Sau đó hàm sẽ trỏ tới bảng ghi tiếp theo cho tới khi gặp bảng ghi cuối cùng hàm trả về giá trị false. Để truy xuất tới các giá trị của cột ta viết
tên_object->tên_cột .
Cú pháp :
object mysql_fetch_object(int result_identifier);
Trong đó : result_identifier là mã số trả về của hàm mysql_query() hoặc mysql_db_query() .
<?php
$mysql = “select id, name from ds_thanhvien”; $link = mysql_connect($host, $user, $password); $result = mysql_db_query(“php”, $mysql);
while ($row = mysql_fetch_object($result)) { echo $row->id ;
echo $row->name; }
?>
+mysql_fetch_assoc() :lấy về một dòng kết quả nh− là một mảng liên kết .
cú pháp: array mysql_fetch_assoc(int result_identifier)
Trong đó : result_identifier là mã số trả về của hàm mysql_query() hoặc mysql_db_query() .
Hàm trả về một mảng t−ơng ứng với một bản ghi đ−ợc lấy về và trả lại FALSE nếu không có bản ghi nào. Hàm này t−ơng đ−ơng với hàm
array mysql_fetch_array() với tham số result_type là : MYSQL_ASSOC ví dụ :
<?php
$mysql = “select id, name from ds_thanhvien”; $link = mysql_connect($host, $user, $password); $result = mysql_db_query(“php”, $mysql);
while ($row = mysql_fetch_assoc($result)) { echo $row[“id”];
echo $row[“name”]; }
+mysql_data_seek()
Di chuyển con trỏ bên trong “tập kết quả” (có đ−ợc sau khi câu truy vấn SELECT đ−ợc thực hiện)
Cú pháp: bool mysql_data_seek(int result_identifier, int row_number);
Trong đó : result_identifier là mã số trả về của hàm mysql_query(), mysql_db_query(), mysql_list_tables(), mysql_list_dbs() .
row_number là chỉ số của bản ghi mà cần đặt con trỏ vào . Hàm trả về true nếu thành công, false nếu lỗi .
Hàm này sẽ di chuyển con trỏ bên trong “tập kết quả” (đ−ợc chỉ rõ bởi tham đối result_identifier) đến dòng có mã bằng tham đối row_number.
Các dòng trong tập kết quả đ−ợc bắt đầu từ 0 Ví dụ:
<?php
$link = mysql_pconnect ($host, $user, $password) or die ("Could not connect");
$query = "SELECT last_name, first_name FROM friends"; $result = mysql_db_query (“php”,$query)
or die ("Query failed"); # fetch rows in reverse order
for ($i = mysql_num_rows ($result) - 1; $i >=0; $i--) { if (! Mysql_data_seek ($result, $i)) {
printf ("Cannot seek to row %d\n", $i); continue;
}
if(!($row = mysql_fetch_object ($result))) continue;
printf ("%s %s<BR>\n", $row->last_name, $row->first_name); }
mysql_free_result ($result); ?>
+ mysql_num_rows() :trả lại số dòng trong result_identifier (nơi chứa kết quả của câu lệnh SQL đã đ−ợc thực hiện)
cú pháp: mysql_num_rows(int result_identifier) ;
Trong đó : result_identifier là mã số trả về của hàm mysql_query(), mysql_db_query(), mysql_list_tables(), mysql_list_dbs() .
+mysql_affected_rows()
cú pháp : int mysql_affected_rows(int [link_identifier]) ;
Trong đó :int link_identifier là mã số nhận dạng, nó phải đ−ợc thực hiện trong hàm mysql_select_db() tr−ớc đó .
Hàm trả về số dòng đã bị tác động bởi một câu truy vấn SQL :INSERT, UPDATE, DELETE tr−ớc đó theo tham số link_identifier. Nếu
link_identifier không đ−ợc chỉ định thì mã kết nối tr−ớc đó sẽ đ−ợc chỉ định. Chú ý :
- Nếu câu lệnh SQL tr−ớc đó là DELETE mà không có mệnh đề WHERE thì toàn bộ các bản ghi trong bảng đã bị xoá nh−ng hàm mysql_affected_rows() sẽ trả về gián trị 0.
-Hàm này không có tác dụng đối với câu lệnh truy vấn SELECT. Để lấy đ−ợc số dòng trả về (số dòng đã bị tác động) bởi câu lệnh SELECT ta dùng
hàm mysql_num_rows().
+mysql_result() : lấy dữ liệu từ result_identifier
cú pháp : mixed mysql_result(int result_identifier, int row, mixed [field]);
Trong đó : result_identifier là mã số trả về của hàm mysql_query(), mysql_db_query(), mysql_list_tables(), mysql_list_dbs() .
row là bản ghi mà ta sẽ lấy dữ liệu
field là tr−ờng trong dòng row mà ta sẽ lấy dữ liệu . Các tham số result_identifier và row phải có, còn tham field là tùy chọn. Hàm sẽ trả lại các nội dung của dòng row và cột field từ tập kết quả đ−ợc chỉ định bởi biến result_identifier. Nếu đối số field không đ−ợc chỉ định rõ thì tr−ờng tiếp theo của bản ghi sẽ đ−ợc trả về .
Ví dụ: <?php
$mysql = “select id, name from ds_thanhvien”; $link = mysql_connect($host, $user, $password); $result = mysql_db_query(“php”, $mysql);
echo “ mysql_result($result, 0, “id”) <BR>\n”; echo “ mysql_result($result, 0, “name”) <BR>\n”; ?>
+mysql_free_result() : Hàm giải phóng vùng bộ nhớ đ−ợc liên kết với result_identifier .
cú pháp: mysql_free_result(int result_identifier) ;
Trong đó : result_identifier là mã số trả về của hàm mysql_query(), mysql_db_query(), mysql_list_tables(), mysql_list_dbs() .
Hàm này chỉ đ−ợc dùng nếu nh− bạn đánh giá thấy rằng kịch bản của bạn sử dụng quá nhiều bộ nhớ khi đang chạy. Gọi hàm này trên một trình xử lý kết quả sẽ giải phóng toàn bộ dữ liệu liên kết trong bộ nhớ .
Ngoài ra còn các hàm khác:
string mysql_tablename (int result_identifier, int i)
Hàm trả lại tên của bảng/csdl tại chỉ số i trong result_identifier. string mysql_field_name (int result_identifier, int field_index)
Hàm trả lại tên của tr−ờng tại vị trí field_index trong mã result_identifier int mysql_list_dbs ([int link_identifier])
Hàm trả lại một result_identifier là danh sách biến CSDL trên MySQL Server nếu thành công, lỗi trả về false .
int mysql_list_tables (string database [, int link_identifier])
Hàm trả về danh sách tất cả câc bảng trong một CSDL MySQL, thành công trả về một result identifier, giá trị false nếu có lỗi .
int mysql_list_fields (string database_name, string table_name [, int link_identifier])
Hàm trả về thông tin liên quan đến một bảng dữ liệu. int mysql_num_fields (int result_identifier)
Trả về số tr−ờng trong tập kết quả .
int mysql_num_rows (int result_identifier)
Trả về số bản ghi trong tập kết quả, hàm này chỉ có giá đối với các câu lệnh SELECT ,để lấy lại số bản ghi đ−ợc trả lại từ các lệnh :INSERT, UPDATE hoặc DELETE, dùng mysql_affected_rows().
string mysql_field_type (int result_identifier, int field_index) Hàm trả về kiểu dữ liệu của tr−ờng tại vị trí field_index trong mã result_identifier .
int mysql_field_len (int result_identifier, int field_offset)
Hàm trả về độ dài của tr−ờng đ−ợc chỉ định thông qua tham số field_offset . array mysql_fetch_lengths (int result_identifier)
trả về một mảng t−ơng ứng với các độ dài của mỗi tr−ờng trong bản ghi đ−ợc lấy về bởi hàm mysql_fetch_row() hoặc false nếu có lỗi.
int mysql_errno ([int link_identifier])
Hàm trả về mã lỗi từ hàm thao tác CSDL MySQL tr−ớc ,trả về giá trị 0 nếu không có lỗi .
string mysql_error ([int link_identifier])
Hàm trả về xâu thông báo lỗi từ hàm thao tác CSDL MySQL tr−ớc, trả về xâu rỗng nếu không có lỗi .
object mysql_fetch_field (int result_identifier [, int field_offset]) Lấy thông tin về trờng từ tập kết quả rồi trả lại nh một đối t−ợng.
XI. Session và Cookie