Giáo trình PHP nâng cao

Bài 1: Lập trình website theo mô hình MVC  
1. Giới thiệu mô hình MVC  
MVC từ viết tắt bởi 3 từ Model – View – Controller. Đây là mô hình thiết  
kế sử dụng trong kỹ thuật phần mềm. Mô hình source code thành 3 phần, tương ứng  
mỗi từ. Mỗi từ tương ứng với một hoạt động tách biệt trong một mô hình.  
Để hiểu hơn, sau đây chúng ta sẽ cùng đi phân tích từng thành phần:  
Mô hình MVC và các thành phần bên trong của MVC.  
Model (M):  
bộ phận chức năng lưu trữ toàn bộ dữ liệu của ứng dụng. Bộ phận này  
một cầu nối giữa 2 thành phần bên dưới là View và Controller. Model thể hiện  
dưới hình thức một cơ sở dữ liệu hoặc có khi chỉ đơn giản một file XML bình  
thường. Model thể hiện rõ các thao tác với cơ sở dữ liệu như cho phép xem, truy  
xuất, xử dữ liệu,…  
View (V):  
Đây phần giao diện (theme) dành cho người sử dụng. Nơi người dùng  
thể lấy được thông tin dữ liệu của MVC thông qua các thao tác truy vấn như tìm  
kiếm hoặc sử dụng thông qua các website.  
Thông thường, các ứng dụng web sử dụng MVC View như một phần của hệ  
thống, nơi các thành phần HTML được tạo ra. Bên cạnh đó, View cũng chức năng  
ghi nhận hoạt động của người dùng để tương tác với Controller. Tuy nhiên, View  
không có mối quan hệ trực tiếp với Controller, cũng không được lấy dữ liệu từ  
Controller mà chỉ hiển thị yêu cầu chuyển cho Controller mà thôi.  
dụ: Nút “delete” được tạo bởi View khi người dùng nhấn vào nút đó sẽ có  
một hành động trong Controller.  
Controller (C):  
Bộ phận nhiệm vụ xử lý các yêu cầu người dùng đưa đến thông qua view.  
Từ đó, C đưa ra dữ liệu phù hợp với người dùng. Bên cạnh đó, Controller còn có  
chức năng kết nối với model.  
Luồng tương tác giữa các thành phần trong MVC.  
dụ: Chức năng thêm bài viết mới trong trang quản trị website. Nơi đây có 2 trường  
nhập về tiêu đề nội dung bài viết, thì trong đó:  
View sẽ hiển thra phần nhập form tiêu đề nội dung.  
Controller lấy dữ liệu t2 trường gửi tới Model.  
Model lúc này sẽ nhận dữ liệu từ Controller để lưu trtrong cơ sở dữ liệu.  
Mỗi bộ phận thực hiện chức năng nhất định, nhưng chúng có sự thống nhất, liên  
kết với nhau tạo nên mô hình MVC. Mô hình này tương đối nhẹ. Nó có thể tích hợp  
được nhiều tính năng có trong ASP.NET hiện giờ. dụ như authentication (quá  
trình xác thực).  
Luồng đi trong mô hình MVC như thế nào?  
Chúng ta có thể hình dung, khi một yêu cầu từ máy client gửi tới server,  
Controller sẽ thực hiện nhiệm vụ của mình đó tiếp nhận xử lý yêu cầu. Trong  
trường hợp cần thiết, nó có thể liên hệ Model – bộ phận làm việc với database để hỗ  
trợ.  
Khi xử lý xong yêu cầu, kết quả sẽ được trả về View. Tại View sẽ tạo mã  
HTML thành giao diện trả về hiển thị trên trình duyệt.  
Ưu điểm của mô hình MVC  
Nhẹ, tiết kiệm băng thông: MVC không sử dụng viewstate nên ktiết kiệm  
diện tích băng thông. Khi sử dụng, người dùng có thể sử dụng ứng dụng trên web  
cần tương tác gửi nhận dữ liệu một cách liên tục. Do đó, việc giảm băng thông  
giúp cho website hoạt động tốt ổn định hơn.  
Kiểm tra dễ dàng: Với MVC, bạn thể dễ dàng kiểm tra, rà soát lỗi phần  
mềm trước khi tới tay người tiêu dùng, đảm bảo chất lượng độ uy tín cao  
hơn.  
Chức năng control: Trên các nền website thì ngôn ngữ lập trình như CSS,  
HTML, Javascript một vai trò vô cùng quan trọng. Việc sử dụng mô hình  
MVC sẽ giúp bạn một bộ control ưu việt trên nền tảng các ngôn ngữ hiện  
đại với nhiều hình thức khác nhau.  
View và size: View sẽ nơi lưu trữ các dữ liệu. Càng nhiều yêu cầu được  
thực hiện thì kích thước càng tệp càng lớn. Khi đó, đường truyền mạng cũng  
giảm tốc độ load. Việc sử dụng mô hình MVC sẽ giúp bạn tiết kiệm được diện  
tích băng thông một cách tối ưu.  
Chức năng Soc (Separation of Concern): Chức năng này cho phép bạn phân  
tách rõ ràng các phần như Model, giao diện, data, nghiệp vụ.  
Tính kết hợp: Việc tích hợp ở mô hình MVC cho phép bạn thoải mái viết  
code trên nền tảng website. Khi đó, server của bạn sẽ được giảm tải khá nhiều.  
Đơn giản: Đây một mô hình với kết cấu tương đối đơn giản. bạn không  
có quá nhiều chuyên môn cũng thể sử dụng được.  
Nhược điểm của mô hình MVC  
MVC thường được sử dụng vào những dự án lớn. Do đó, với các dự án nhỏ,  
mô hình MVC có thể gây cồng kềnh, tốn thời gian trong quá trình phát triển cũng  
như thời gian trung chuyển dữ liệu.  
2. Ứng dụng mô hình MVC vào lập trình  
Mô hình MVC được ứng dụng trong nhiều ngôn ngữ lập trình khác nhau,  
nhưng phổ biến nhất ứng dụng ASP.NET MVC hay PHP MVC.  
MVC đang là mô hình được ứng dụng rất nhiều trong lập trình.  
Hệ thống MVC phát triển tốt sẽ cho phép phát triển front – end, back – end  
cùng trên hệ thống mà không có sự can thiệp, chia sẻ, chỉnh sửa các tập tin trong khi  
một hoặc hai bên vẫn đang làm việc.  
Việc sử dụng mô hình tương đối đơn giản. Chỉ cần hiểu rõ quy trình vận hành,  
nắm được các chức năng của từng bộ phận thì việc triển khai mô hình MVC tương  
đối dễ dàng.  
Xây dựng chức năng đăng nhập bằng MVC  
Phần này hướng dẫn tạo chức năng đăng nhập theo mô hình MVC.  
Bước 1: Tạo một thư mục mới. Trong thư mục mới này, tạo 3 thư mục mới khác với  
tên controller, model, view tương ứng cũng tạo một trang PHP với tên index.php.  
new folder  
– controller  
– model  
– view  
– index.php  
Bước 2: Trong thư mục controller, tạo một trang PHP với tên Controller và viết  
đoạn mã sau:  
<?php  
include_once(“model/Model.php”);  
class Controller {  
public $model;  
public function __construct()  
{
$this->model = new Model();  
}
public function invoke()  
{
$reslt = $this->model->getlogin();  
// gọi hàm  
getlogin() của lớp model và lưu giá trị trả về của hàm  
này vào biến reslt.  
if($reslt == ‘login’)  
{
include ‘view/Afterlogin.php’;  
}
else  
{
include ‘view/login.php’;  
}
}
}
?>  
Bước 3: Trong thư mục model, tạo một trang PHP với tên Model và viết đoạn mã  
sau:  
<?php  
include_once(“model/Book.php”);  
class Model {  
public function getlogin()  
{
if(isset($_REQUEST[‘username’]) &&  
isset($_REQUEST[‘password’])){  
if($_REQUEST[‘username’]==’admin’ &&  
$_REQUEST[‘password’]==’admin’){  
return ‘login’;  
}
else{  
return ‘invalid user’;  
}
}
}
}
?>  
Bước 4: Trong thư mục view, tạo hai trang PHP với tên lần lượt là login.php,  
Afterlogin.php và viết đoạn mã sau:  
login.php  
<html>  
<head></head>  
<body>  
<?php  
echo $reslt;  
?>  
<form action=”” method=”POST”>  
<p>  
<label>Username</label>  
<input id=”username” value=”” name=”username”  
type=”text” required=”required” /><br>  
</p>  
<p>  
<label>Password</label>  
<input id=”password” name=”password”  
type=”password” required=”required” />  
</p>  
<br />  
<p>  
<button type=”submit” name=”submit”><span>Login  
</span> </button>  
<button type=”reset”><span>Cancle</span></button>  
</p>  
</form>  
</body>  
</html>  
Afterlogin.php  
<html>  
<head></head>  
<body>  
<?php  
echo $reslt;  
?>  
</body>  
</html>  
Bước 5: Mở tệp index.php và viết mã sau:  
<?php  
include_once(“controller/Controller.php”);  
$controller = new Controller();  
$controller->invoke();  
?>  
Bài 2: Các kỹ thuật lập trình MySQL với PHP nâng cao  
1. Kết nối và truy vấn cơ sở dữ liệu sử dụng PDO  
Gii thiu PDO - PHP Data Objects  
PHP Data Objects (PDO) là mt lp truy xut cơ sdliu cung cp mt  
phương pháp thng nht để làm vic vi nhiu loi cơ sdliu khác nhau. Khi làm  
vic vi PDO bn skhông cn phi viết các câu lnh SQL cthmà chsdng  
các phương thc mà PDO cung cp, giúp tiết kim thi gian và làm cho vic chuyn  
đổi Hqun trcơ sdliu trnên ddàng hơn, chỉ đơn gin là thay đổi Connection  
String (chui kết ni CSDL).  
Chúng ta chcn nm rõ API mà PDO cung cp là có thlàm vic được vi  
nhiu Hqun trcơ sdliu khác nhau như MySQL, SQLite, PostgreSQL,  
Microsoft SQL Server,... và có thddàng chuyn đổi chúng.  
Các Hqun trcơ sdliu (Database Management System) mà PDO htrợ  
gm có:  
Tên driver  
DBMS  
PDO_CUBRID  
PDO_DBLIB FreeTDS  
PDO_FIREBIRD  
PDO_IBM  
Cubrid  
Microsoft SQL Server / Sybase  
Firebird  
IBM DB2  
PDO_INFORMIX  
PDO_MYSQL  
PDO_OCI  
IBM Informix Dynamic Server  
MySQL 3.x/4.x/5.x  
Oracle Call Interface  
Tên driver  
DBMS  
PDO_ODBC  
PDO_PGSQL  
PDO_SQLITE  
PDO_SQLSRV  
PDO_4D  
ODBC v3 (IBM DB2, unixODBC and win32 ODBC)  
PostgreSQL  
SQLite 3 and SQLite 2  
Microsoft SQL Server / SQL Azure  
4D  
Kết ni cơ sdliu  
Mi DBMS scó các phương thc kết ni khác nhau (có loi cn Username,  
Password, đường dn đới Database, Port, có loi không). Connection String ca các  
DBMS phbiến hu hết đều có dng như sau:  
$conn = new PDO('mysql:host=localhost;dbname=izlearn', $username, $password);  
Vi mysql là tên ca DBMS, localhost có ý nghĩa database được đặt trên cùng  
server, izlearn là tên ca database. $username và $password là 2 biến cha thông tin  
xác thc.  
Đối vi SQLite, DBMS này không có cơ chế xác thc bng Username và  
Password mà chỉ đơn gin là đường dn ti file dliu:  
$conn = new PDO("sqlite:your/database/path/izlearn.db");  
Đế ngt kết ni khi không cn thao tác vi database na, chúng ta chcn sét  
biến $conn vnull;  
$conn = null;  
Insert và Update  
Thêm mi (insert) và cp nht (update) dliu là nhng hot động cơ bn khi  
thao tác vi database. Vi PDO, mi hot động insert hay update được thc hin qua  
3 quá trình sdng cơ chế Prepared Statement  
Prepare statement: Chuẩn bị một câu lệnh SQL làm khung/mẫu được gọi là  
Prepared Statement với các Placeholder (có thể hiểu placeholder đóng vai trò  
như tham số của các phương thức khi bạn khai báo hàm)  
Bind params: Gắn giá trị thực vào các placeholder (tương tự như khi bạn  
truyền giá trị vào các tham số của phương thức)  
Execute: Thực thi câu lệnh.  
Prepared Statement  
Có 2 loi Placeholder trong Prepared Statement là Placeholder không định  
danh (Unnamed Placeholder) và Placeholder định danh (Named Placeholder) như ví  
dsau:  
$stmt = $conn->prepare('INSERT INTO users (name, email, age) values (?, ?, ?)');  
$stmt = $conn->prepare('INSERT INTO users (name, email, age) values (:name,  
:mail, :age)');  
Dòng lnh thnht sdng Placeholder không định danh là các du hi - ?.  
Dòng lnh th2 sdng Placeholder định danh: :name, :mail, :age (lưu ý du hai  
chm và placeholder không nht thiết phi ging tên column). Sau đây là toàn bquá  
trình Insert và Update sdng 2 loi Placeholder nêu trên.  
Unnamed Placeholder  
//Khởi tạo Prepared Statement từ biến $conn ở phần trước  
$stmt = $conn->prepare('INSERT INTO users (name, email,  
age) values (?, ?, ?)');  
//Gán các biến (lúc này chưa mang giá trị) vào các  
placeholder theo thứ tự tương ứng  
$stmt->bindParam(1, $name);  
$stmt->bindParam(2, $mail);  
$stmt->bindParam(3, $age);  
//Gán giá trị thực thi  
$name = "Vu Hoang Lam"<  
$mail = "lamvh@live.com";  
$age = 22;  
$stmt->execute();  
//Gán những giá trị khác và tiếp tục thực thi  
$name = "Nguyen Van A";  
$mail = "nva@live.com";  
$age = 23;  
$stmt->execute();  
Như chúng ta thy ta chcn khi to Prepared Statement mt ln và có thsử  
dng li nhiu ln. Vi mi column - placeholder ta phi thc hin gán tham smt  
ln, điu này skhông sao vi nhng table có ít column như ví dtrên, nhưng srt  
bt tin nếu bng có nhiu table, rt may mn ta có cách khác để làm vic này, đó là  
lưu toàn bgiá trvào trong mt mng và truyn mng này vào phương thc  
execute(), cthnhư sau:  
$stmt = $conn->prepare('INSERT INTO users (name, email, age)  
values (?, ?, ?)');  
$data = array('Vu Hoang Lam', 'lamvh@live.com', 22);  
//Phương thức execute() dưới đây sẽ gán lần lượt giá trị trong  
mảng vào các Placeholder theo thứ tự  
$stmt->execute($data);  
Named Placeholder  
Đối vi Named Placeholder, cách thc hin cũng khá tương đồng vi  
Unnamed Placeholder, chkhác là chúng ta không dùng thtplaceholder để gán  
giá tr(bind) mà dùng chính tên ca placeholder:  
//Khởi tạo Prepared Statement từ biến $conn ở phần trước  
$stmt = $conn->prepare('INSERT INTO users (name, email, age) values (:name,  
:mail, :age)');  
//Gán các biến (lúc này chưa mang giá trị) vào các placeholder theo tên của chúng  
$stmt->bindParam(':name', $name);  
$stmt->bindParam(':mail', $mail);  
$stmt->bindParam(':age', $age);  
//Gán giá trị thực thi  
$name = "Vu Hoang Lam";  
$mail = "lamvh@live.com";  
$age = 22;  
$stmt->execute();  
Chúng ta cũng có thsdng mng để rút gn:  
//Lưu ý: Không cần thiết phải sử dụng dấu hai chấm cho các key  
$data = array('name' => 'Vu Hoang Lam', 'mail' => 'lamvh@live.com', 'age' => 22);  
Một mẹo hữu ích khác khi sử dụng Named Placeholder đó là insert Object  
class $user  
{
public $name;  
public $mail;  
public $age;  
}
$person = new $user();  
$person->name = 'Vu Hoang Lam';  
$person->mail = 'lamvh@live.com';  
$person->age = 22;  
$stmt = $conn->prepare('INSERT INTO users (name, email, age)  
values (:name, :mail, :age)');  
$stmt->execute((array)$person);  
dòng cui cùng, chúng ta đã thc hin "ép kiu" (cast) Object $person thành  
array để truyn vào phương thc execute();  
Vic sdng Prepared Statement sgiúp chúng ta tránh được SQL Injection.  
Select Data - "Đọc" dliu tdatabase  
Khi đọc dliu tdatabase, PDO strvdliu theo cu trúc mng (array) hoc  
đối tượng (object) thông qua phương thc fetch(). Bn nên thiết lp trước cu trúc dữ  
liu trước khi gi phương thc này, PDO htrcác tuchn sau:  
PDO::FETCH_ASSOC: Trả về dữ liệu dạng mảng với key là tên của column  
(column của các table trong database)  
PDO::FETCH_BOTH (default): Trả về dữ liệu dạng mảng với key là tên của  
column và cả số thứ tự của column  
PDO::FETCH_BOUND: Gán giá trị của từng column cho từng biến đã khởi  
tạo trước đó qua phương thức bindColumn()  
PDO::FETCH_CLASS: Gán giá trị của từng column cho từng thuộc tính  
(property/attribute) của một lớp Class theo tên column và tên thuộc tính.  
PDO::FETCH_INTO: Gán giá trị của từng column cho từng thuộc tính của  
một Class Instance (thể hiện của một lớp)  
PDO::FETCH_LAZY:  
Gộp  
chung  
PDO::FETCH_BOTH/PDO::FETCH_OBJ  
PDO::FETCH_NUM: Trả về dữ liệu dạng mảng với key là số thứ tự của  
column  
PDO::FETCH_OBJ: Trả về một Object của stdClass (link is external) với tên  
thuộc tính của Object là tên của column.  
Trong thc tế, chúng ta chthường dùng 3 kiu fetch đó là: FETCH_ASSOC,  
FETCH_CLASS và FETCH_OBJ. Để thiết lp cu trúc dliu (Fetch Style hay  
Fetch Mode) trước khi fetch ta dùng câu lnh sau:  
$stmt->setFetchMode(PDO::FETCH_ASSOC);  
Hoc nếu mun bn cũng có ththiết lp kiu fetch khi gi hàm fetch():  
$stmt->fetch(PDO::FETCH_ASSOC);  
FETCH_ASSOC  
Kiu fetch này sto ra mt mng kết hp lp chmc theo tên column (nghĩa  
là các key ca mng chính là tên ca column), tương tnhư khi ta dùng  
MySQL/MySQLi Extension.  
//Tạo Prepared Statement  
$stmt = $conn->prepare('SELECT email, age from users WHERE name =  
:name');  
//Thiết lập kiểu dữ liệu trả về  
$stmt->setFetchMode(PDO::FETCH_ASSOC);  
//Gán giá trị thực thi  
$stmt->execute(array('name' => 'a'));  
//Hiển thị kết quả, vòng lặp sau đây sẽ dừng lại khi đã duyệt qua  
toàn bộ kết quả  
while($row = $stmt->fetch()) {  
echo $row['name'] , '\n';  
echo $row['email'] , '\n';  
echo $row['age'] , '\n';  
}
FETCH_OBJ  
Kiu fetch này trvmt Object ca stdClass cho mi row ca kết qu.  
//Tạo Prepared Statement  
$stmt = $conn->prepare('SELECT email, age from users WHERE name =  
:name');  
//Thiết lập kiểu dữ liệu trả về  
$stmt->setFetchMode(PDO::FETCH_OBJ);  
//Gán giá trị thực thi  
$stmt->execute(array('name' => 'a'));  
//Hiển thị kết quả, vòng lặp sau đây sẽ dừng lại khi đã duyệt qua  
toàn bộ kết quả trả về  
while($row = $stmt->fetch()) {  
echo $row->name , '\n';  
echo $row->email , '\n';  
echo $row->age , '\n';  
}
FETCH_CLASS  
Kiu fetch này cho phép chúng ta đưa kết quvào Object ca mt Class mà  
chúng ta chỉ định. Khi sdng FETCH_CLASS, thuc tính ca class sẽ được gán  
giá trtrước khi constructor ca class đó được gi (phi chú ý vì điu này rt quan  
trng). Nếu không có thuc tính khp vi tên ca mt column bt kthì thuc tính  
đó sẽ được tự động to ra (public).  
Gistable users có mt ta đã có Class User được định nghĩa như sau:  
class User {  
public $name;  
public $email;  
public $isAdmin = 'No';  
function __construct() {  
if ($this->name == 'Vu Hoang Lam')  
$this->isAdmin = 'Yes';  
}
}
Khi query data tdatabase sdng đon code sau:  
//Tạo Prepared Statement  
$stmt = $conn->prepare('SELECT email, age from users WHERE name =  
:name');  
//Thiết lập kiểu dữ liệu trả về, chỉ định dữ liệu được đưa vào  
object của class User  
$stmt->setFetchMode(PDO::FETCH_CLASS, 'User');  
//Gán giá trị thực thi  
$stmt->execute(array('name' => 'a'));  
//Hiển thị kết quả, vòng lặp sau đây sẽ dừng lại khi đã duyệt qua  
toàn bộ kết quả trả về  
while($obj = $stmt->fetch()) {  
echo $obj->email;  
echo $obj->isAdmin;  
}
Vì constructor được gi sau khi thuc tính $name được gán bng Vu Hoang  
Lam nên isAdmin smang giá trYes. Nếu mun constructor ca class được gi  
trước khi các thuc tính được gán giá tr, chúng ta phi sdng thêm  
PDO::FETCH_PROPS_LATE. Cách sdng như sau:  
//Hãy thử sử dụng kiểu fetch trên và so sánh kết quả hiển thị  
$stmt->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE,  
'User');  
Nếu cn truyn các tham scho constructor ca class thông qua phương thc  
fetch(), chúng ta có thể đặt chúng trong mt array theo thttương ng cthnhư  
sau:  
$stmt->setFetchMode(PDO::FETCH_CLASS, 'User', array('param1', 'param2',  
'param3'));  
Exceptions - Xlý ngoi lệ  
PDO dùng các Exceptions để xlý các li phát sinh khi làm vic vi database,  
vì thế tt cnhng gì chúng ta làm vi PDO nên được đặt trong mt try/catch block.  
PDO cung cp 3 chế độ xli (Error Mode) được thiết lp thông qua phương thc  
setAttribute():  
$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT );  
$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );  
$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );  
PDO::ERRMODE_SILENT  
Đây là chế độ xlý li mc định ca PDO, khi gp mt li bt k, PDO sim  
lng (silent) và chương trình vn tiếp tc chy. Chúng ta có thly mã li và thông  
tin vcác li đã xy ra qua PDO::errorCode() và PDO::errorInfo()  
PDO::ERRMODE_WARNING  
chế độ này khi gp phi li PDO sném ra mt PHP Warning, chương trình  
stiếp tc chy.  
PDO::ERRMODE_EXCEPTION  
Đây là mode mà chúng ta nên sdng nht, khi đặt trong mt try/catch block  
sgiúp bn kim soát các li phát sinh mt cách uyn chuyn và giu các thông báo  
li có thkhiến Attacker khai thác hthng ca bn.  
try {  
$stmt = new PDO('mysql:host=localhost;dbname=izlearn',  
'lamvh', 'talapassday');  
$stmt->setAttribute( PDO::ATTR_ERRMODE,  
PDO::ERRMODE_EXCEPTION );  
//Sai cú pháp, FORM thay vì FROM  
$stmt->prepare('SELECT name FORM people');  
}
catch(PDOException $e) {  
echo "ERROR! Co loi xay ra voi PDO";  
file_put_contents('PDOErrors.txt', $e->getMessage(),  
FILE_APPEND);  
}
Đon code trên sghi thông báo li vào mt file text vi tên PDOErrors.txt  
Mt sphương thc hu ích khác  
$conn->lastInsertId();  
Phương thc trên trvAuto Incremented ID ca rows được thêm gn nht.  
$conn->exec('DELETE FROM users WHERE uid = 1');  
Đối vi các lnh SQL không có dliu trv, và không cn thiết phi truyn  
tham sthì có thsdng phương thc exec(). Phương thc này strvslượng  
row btác động sau khi thc hin câu lnh. Như ví dtrên strvslượng row bị  
xoá.  
$conn = $DBH->quote($foo);  
Phương thc quote() sgiúp chúng ta thêm du nháy cho mt string để string  
đó an toàn khi sdng để truy vn, nếu chúng ta không mun sdng Prepared  
Statement.  
$stmt->rowCount();  
Phương thc rowCount() trvslượng row btác động sau khi thc hin các  
thao tác DELETE, INSERT và UPDATE. Dùng rowCount() cho thao tác SELECT  
có thstrvkết qukhông đúng vi mt sloi database.  
2. Kết nối và truy vấn cơ sở dữ liệu sử dụng MySQLi  
Mở kết nối tới MySQL  
dụ (MySQLi Hướng đối tượng)  
<?php  
$servername = "localhost";  
$username = "username";  
$password = "password";  
Tải về để xem bản đầy đủ
docx 70 trang Thùy Anh 05/05/2022 3340
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình PHP nâng cao", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • docxgiao_trinh_php_nang_cao.docx