Hướng dẫn lập trình PHP toàn tập

PHP: Hypertext Preprocessor (PHP) là một ngôn ngữ lập trình cho phép nhà phát triển web tạo ra nội dung động tương tác với cơ sở dữ liệu.

PHP về cơ bản được sử dụng để phát triển các ứng dụng dựa trên nền web. Hướng dẫn này giúp bạn hiểu biết về PHP từ cơ bản tới nâng cao.

Đặc điểm của PHP

Năm đặc điểm quan trọng của PHP:

  • Sự đơn giản
  • Hiệu quả
  • Bảo mật
  • Uyển chuyển
  • Quen thuộc

Các ứng dụng của PHP

Như đã đề cập ở trên, PHP là một trong những ngôn ngữ được sử dụng rộng rãi nhất trên web. Tôi sẽ liệt kê một vài ứng dụng của PHP ở đây:

  • PHP thực hiện các chức năng hệ thống, tức là từ các tệp trên một hệ thống mà nó có thể tạo, mở, đọc, viết và đóng chúng.
  • PHP có thể xử lý các biểu mẫu, tức là thu thập dữ liệu từ tệp, lưu dữ liệu vào tệp, qua email bạn có thể gửi dữ liệu, trả lại dữ liệu cho người dùng.
  • Bạn thêm, xóa, sửa đổi các thành phần trong cơ sở dữ liệu của bạn thông qua PHP.
  • PHP có thể tạo, sửa đổi, xóa cookie.
  • Sử dụng PHP, bạn có thể hạn chế người dùng truy cập vào một số trang trên trang web của bạn.
  • Nó có thể mã hóa dữ liệu.
  • Quản lý phiên làm việc của người dùng.
  • ...

Khai báo môi trường PHP

Công cụ phân tích cú pháp PHP cần một cách để phân biệt mã PHP với các thành phần khác trong trang web. Có bốn cách để bắt đầu môi trường PHP.

Thẻ PHP

<?php...?>

Đây là kiểu khai báo phổ biến và hiệu quả nhất. Nếu bạn sử kiểu khai báo này, bạn có thể chắc chắn rằng các thẻ của bạn sẽ luôn được thông dịch chính xác.

Thẻ ngắn hoặc mở ngắn

<?...?>

Bạn phải thực hiện một trong hai cấu hình sau để cho phép PHP nhận ra thẻ ngắn này:

  • Chọn tùy chọn cấu hình --enable-short-tags khi bạn xây dựng PHP.
  • Thiết lập tùy chọn cấu hình short_open_tag = On trong file php.ini (mặc định là Off).
Lưu ý: Tùy chọn này phải được tắt khi phân tích cú pháp XML bằng PHP vì nó có cùng một cú pháp được sử dụng cho các thẻ XML.

Thẻ kiểu ASP

<%...%>

Thẻ kiểu ASP bắt chước thẻ được sử dụng bởi Active Server Pages để phân định các khối mã. Để sử dụng thẻ kiểu ASP, bạn sẽ cần thiết lập tùy chọn cấu hình short_open_tag = On trong file php.ini (mặc định là Off).

Thẻ script HTML

<script language="PHP">...</script>

PHP là ngôn ngữ Scripting (tập lệnh) phía máy chủ. Vì vậy, tập lệnh HTML cũng được sử dụng để bắt đầu môi trường PHP như các ngôn ngữ tập lệnh khác.

Comment trong PHP

Comment là một phần của một chương trình chỉ tồn tại cho người đọc và bị bỏ qua trước khi hiển thị các kết quả của chương trình. Có hai định dạng comment trong PHP: comment một dòng và comment nhiều dòng.

Comment một dòng: Chúng thường được sử dụng để giải thích ngắn hoặc ghi chú liên quan đến mã. Dưới đây là các ví dụ về comment một dòng:

<?php
   # This is a comment, and
   # This is the second line of the comment
   
   // This is a comment too. Each style comments only
   print "An example with single line comments";
?>

Trong ví dụ trên, comment là những dòng bắt đầu bằng # hoặc //. Điều này sẽ tạo ra kết quả sau:

An example with single line comments

Comment nhiều dòng: Chúng thường được sử dụng để cung cấp các giải thích chi tiết hơn khi cần thiết. Cách comment nhiều dòng giống như trong C. Dưới đây là ví dụ về comment nhiều dòng.

<?php
   /* This is a comment with multiline
      Author : Mohammad Mohtashim
      Purpose: Multiline Comments Demo
      Subject: PHP
   */
   
   print "An example with multi line comments";
?>

Trong ví dụ trên, comment nhiều dòng bắt đầu bằng /* và kết thúc bằng */. Điều này sẽ tạo ra kết quả sau:

An example with multi line comments

Bạn có thể tìm hiểu thêm tổng quan về cú pháp của PHP tại bài viết:

Tổng quan về cú pháp PHP | Comdy
Tổng quan về cú pháp PHP như: khai báo môi trường PHP, comment trong PHP, câu lệnh và khối lệnh trong PHP.

Biến trong PHP

Cách chính để lưu trữ thông tin trong chương trình PHP là sử dụng một biến.

Dưới đây là những điều quan trọng nhất cần biết về biến trong PHP.

  • Tất cả các biến trong PHP được bắt đầu bằng ký hiệu $.
  • Giá trị của một biến là giá trị của phép gán gần đây nhất của nó.
  • Các biến được gán giá trị bằng toán tử =, với biến ở phía bên trái và biểu thức được đánh giá ở bên phải.
  • Các biến có thể được khai báo trước khi gán, nhưng không cần thiết.
  • Các biến trong PHP không có các kiểu nội tại (kiểu dữ liệu) - một biến không biết trước liệu nó sẽ được sử dụng để lưu trữ một số hay một chuỗi ký tự.
  • Các biến được sử dụng trước khi chúng được gán có giá trị mặc định.
  • PHP thực hiện tốt công việc tự động chuyển đổi kiểu dữ liệu từ kiểu này sang kiểu khác khi cần thiết.
  • Các biến PHP giống như Perl.

PHP có tám kiểu dữ liệu mà chúng ta sử dụng để xây dựng các biến của mình:

  • Integer - là số nguyên, không có dấu thập phân, ví dụ: 4195.
  • Double - là các số có dấu phẩy động, ví dụ: 3.14159 hoặc 49.1.
  • Boolean - chỉ có hai giá trị là true hoặc false.
  • NULL - là một kiểu đặc biệt chỉ có một giá trị: NULL.
  • String - là chuỗi các ký tự, ví dụ: 'PHP hỗ trợ các thao tác chuỗi.'
  • Array - là tập hợp các giá trị được đặt tên và lập chỉ mục.
  • Object - là các thể hiện của các lớp do lập trình viên định nghĩa, có thể chứa các loại giá trị và hàm dành riêng cho lớp.
  • Resource - là các biến đặc biệt chứa tham chiếu đến các tài nguyên bên ngoài PHP (như kết nối cơ sở dữ liệu).

Năm kiểu đầu tiên là các kiểu đơn giản và hai kiểu tiếp theo (mảng và đối tượng) là kiểu hỗn hợp - kiểu hỗn hợp có thể chứa các giá trị của các kiểu khác nhau, trong khi các kiểu đơn giản thì không thể.

Bạn có thể xem chi tiết về biến trong PHP tại bài viết sau:

Biến trong PHP | Comdy
Biến trong PHP là gì? Có những loại biến nào trong PHP. Cách khai báo và sử dụng biến trong PHP.

Hằng số trong PHP

Hằng số là gì?

Hằng số là tên hoặc mã định danh cho một giá trị đơn giản. Giá trị của hằng số thì không thể thay đổi trong quá trình thực thi tập lệnh.

Theo mặc định, hằng số phân biệt chữ hoa chữ thường. Theo quy ước, hằng số luôn luôn là chữ hoa.

Một tên hằng bắt đầu bằng một chữ cái hoặc dấu gạch dưới, theo sau là bất kỳ số lượng chữ cái, số hoặc dấu gạch dưới.

Nếu bạn đã định nghĩa một hằng số, nó không thể thay đổi hoặc không xác định (undefined).

Để định nghĩa một hằng số, bạn phải sử dụng hàm define() và bạn chỉ cần chỉ định tên của hằng số để lấy giá trị của nó.

Không giống như với các biến, bạn không cần phải phải khai báo hằng số bắt đầu với $.

Bạn cũng có thể sử dụng hàm constant() để đọc giá trị của hằng nếu bạn muốn lấy tên của hằng một cách linh hoạt.

Hàm constant()

Giống như tên gọi của nó, hàm này sẽ trả về giá trị của hằng.

Điều này rất hữu ích khi bạn muốn lấy giá trị của hằng số, nhưng bạn không biết tên của nó, tức là nó được lưu trữ trong một biến hoặc được trả về bởi một hàm.

<?php
   define("MINSIZE", 50);
   
   echo MINSIZE;
   echo constant("MINSIZE"); // same thing as the previous line
?>

Chỉ những dữ liệu kiểu boolean, integer, float và string mới có thể được chứa trong các hằng số.

Sự khác nhau giữa hằng số và biến

  • Không cần phải khai báo ký tự $ trước một hằng số, trong khi đó cần phải khai báo ký tự $ trước một biến.
  • Hằng số không thể được định nghĩa bằng phép gán đơn giản, chúng chỉ có thể được định nghĩa bằng cách sử dụng hàm define().
  • Hằng số có thể được định nghĩa và truy cập ở bất cứ đâu mà không liên quan đến các quy tắc phạm vi truy cập giống như biến.
  • Khi các hằng số đã được gán giá trị, không thể định nghĩa lại hoặc không xác định (undefined).

Bạn có thể xem chi tiết về hằng số trong PHP tại bài viết sau:

Hằng số trong PHP | Comdy
Hằng số trong PHP là gì? Cách khai báo và sử dụng Hằng số trong PHP. Hằng số ma thuật trong PHP là gì?

Các loại toán tử trong PHP

Toán tử là gì?

Câu trả lời đơn giản có thể giải thích bằng cách sử dụng biểu thức 4 + 5 = 9 . Ở đây 4 và 5 được gọi là toán hạng và + được gọi là toán tử. Ngôn ngữ PHP hỗ trợ những loại toán tử sau.

  • Toán tử số học.
  • Toán tử so sánh.
  • Toán tử logic (hoặc toán tử quan hệ)
  • Toán tử gán.
  • Toán tử có điều kiện (hoặc toán tử tam phân)

Phân loại toán tử

Tất cả các toán tử chúng ta đã thảo luận ở trên có thể được phân loại thành các loại sau:

  • Toán tử đơn phương, nó đứng trước một toán hạng.
  • Toán tử nhị phân, nó có hai toán hạng và thực hiện các phép toán số học và logic.
  • Toán tử điều kiện (một toán tử tam phân), nó thực hiện biểu thức thứ hai hoặc thứ ba tùy thuộc vào việc đánh giá biểu thức thứ nhất.
  • Toán tử gán, nó gán giá trị cho một biến.

Ưu tiên của các toán tử PHP

Ưu tiên của toán tử xác định các nhóm các điều kiện trong một biểu thức. Điều này ảnh hưởng đến cách một biểu thức được đánh giá.

Một số toán tử có quyền ưu tiên cao hơn những toán tử khác; ví dụ, toán tử nhân có độ ưu tiên cao hơn toán tử cộng.

Ví dụ: x = 7 + 3 * 2; Ở đây x được gán 13, không phải 20 vì toán tử * có độ ưu tiên cao hơn + nên trước tiên nó thực hiện nhân với 3 * 2 và sau đó cộng vào 7.

Trong bảng dưới đây các toán tử có quyền ưu tiên cao nhất xuất hiện ở đầu bảng, những toán tử có mức thấp nhất xuất hiện ở cuối bảng. Trong một biểu thức, các toán tử ưu tiên cao hơn sẽ được đánh giá đầu tiên.

Phân loại Toán tử Kết hợp
Đơn phương !  ++  - Phải sang trái
Nhân chia *  /  % Trái sang phải
Cộng trừ +  - Trái sang phải
Quan hệ <  <=  >  >= Trái sang phải
Bình đẳng ==  != Trái sang phải
Logic AND && Trái sang phải
Hợp lý OR || Trái sang phải
Điều kiện ? : Phải sang trái
Gán =  +=  -=  *=  /=  %= Phải sang trái

Bạn có thể xem chi tiết về các loại toán tử trong PHP tại bài viết sau:

Các loại toán tử trong PHP | Comdy
Các loại toán tử trong PHP. Cách khai báo và sử dụng Các loại toán tử trong PHP.

Lệnh điều kiện trong PHP

Các câu lệnh if, if...else, if...elseif ...else và switch được sử dụng để đưa ra quyết định dựa trên các điều kiện khác nhau.

Bạn có thể sử dụng các câu lệnh điều kiện trong mã của mình để đưa ra quyết định. Dưới đây là lược đồ cấu trúc lệnh điều kiện trong PHP:

Lệnh rẽ nhánh trong PHP

PHP hỗ trợ những lệnh điều kiện sau:

  • Lệnh if - sử dụng câu lệnh này nếu bạn muốn thực thi một khối mã khi một điều kiện là đúng.
  • Lệnh if ... else - sử dụng câu lệnh này nếu bạn muốn thực thi một khối mã khi một điều kiện là đúng và thực thi một khối mã khác nếu điều kiện không đúng.
  • Lệnh if...elseif...else - được sử dụng nếu có nhiều điều kiện mà lệnh if...else không đáp ứng được.
  • Lệnh switch - được sử dụng nếu bạn muốn chọn một trong nhiều khối mã để thực thi. Câu lệnh switch được sử dụng để tránh các khối if..elseif..else quá dài.

Bạn có thể xem chi tiết về lệnh điều kiện trong PHP tại bài viết sau:

Lệnh điều kiện trong PHP | Comdy
Lệnh điều kiện trong PHP là gì? Có những Lệnh điều kiện nào trong PHP? Sử dụng Lệnh điều kiện trong PHP.

Vòng lặp trong PHP

Các vòng lặp trong PHP được sử dụng để thực thi cùng một khối mã nhiều lần. PHP hỗ trợ bốn loại vòng lặp sau.

  • for - lặp qua một khối mã với số lần xác định.
  • while - lặp qua một khối mã nếu điều kiện được chỉ định là đúng và sẽ tiếp tục lặp nếu điều kiện là đúng.
  • do ... while - lặp qua một khối mã một lần, và sau đó lặp lại vòng lặp miễn là điều kiện đặc biệt là đúng.
  • foreach - lặp qua một khối mã cho mỗi phần tử trong một mảng.

Chúng ta cũng sẽ thảo luận về các từ khóa continuebreak được sử dụng để kiểm soát việc thực hiện các vòng lặp.

Bạn có thể xem chi tiết về vòng lặp trong PHP tại bài viết sau:

Vòng lặp trong PHP | Comdy
Vòng lặp trong PHP là gì? Có những loại vòng lặp nào trong PHP? Khai báo và sử dụng vòng lặp trong PHP.

Mảng trong PHP

Mảng là một cấu trúc dữ liệu lưu trữ một hoặc nhiều loại giá trị tương tự nhau.

Ví dụ: nếu bạn muốn lưu trữ 100 số thì thay vì định nghĩa 100 biến bạn có thể dễ dàng định nghĩa một mảng có độ dài 100.

Có ba loại mảng khác nhau và mỗi giá trị trong mảng được truy cập bằng chỉ mục.

  • Mảng số - Một mảng có chỉ mục là số. Các giá trị được lưu trữ và truy cập theo kiểu tuyến tính.
  • Mảng kết hợp - Một mảng với chỉ mục là chuỗi. Điều này lưu trữ các giá trị phần tử kết hợp với các giá trị khóa thay vì theo thứ tự chỉ số tuyến tính.
  • Mảng nhiều chiều - Một mảng chứa một hoặc nhiều mảng và giá trị được truy cập bằng nhiều chỉ mục.

Bạn có thể xem chi tiết về mảng trong PHP tại bài viết sau:

Mảng trong PHP | Comdy
Mảng trong PHP là gì? Có những loại mảng nào trong PHP? Cách khai báo và sử dụng mảng trong PHP.

Chuỗi trong PHP

Chuỗi trong PHP là gì?

Chuỗi trong PHP là một chuỗi các ký tự, nó được sử dụng để lưu trữ và thao tác văn bản. Có 4 cách để định nghĩa một chuỗi trong PHP:

  1. Dấu nháy đơn.
  2. Dấu nháy kép.
  3. Cú pháp heredoc.
  4. Cú pháp newdoc.

Dấu nháy đơn

Bạn có thể sử dụng cặp dấu nháy đơn để định nghĩa một chuỗi. Chuỗi này là một chuỗi đơn thuần, nó xem các biến và ký tự đặc biệt trong chuỗi như là các ký tự thông thường khác và không có bất kỳ xử lý nào khi in.

<?php  
   $num1 = 10;   
   $str1 = 'trying variable $num1';  
   $str2 = 'trying backslash n and backslash t inside single quoted string \n \t';  
   $str3 = 'Using single quote \'my quote\' and \\backslash';
   echo $str1;
   echo <br/>;
   echo $str2;
   echo <br/>;
   echo $str3;  
?>  

Đây là kết quả:

trying variable $num1 
trying backslash n and backslash t inside single quoted string \n \t 
Using single quote 'my quote' and \backslash

Dấu nháy kép

Bạn có thể sử dụng cặp dấu nháy kép để định nghĩa một chuỗi. Chuỗi này sẽ thay thế các biến bằng giá trị của nó và hiển thị các ký tự đặc biệt khi in.

<?php  
   $num1=10;   
   echo "Number is: $num1";  
?>

Đây là kết quả:

Number is: 10

Cú pháp heredoc

Bạn cũng có thể sử dụng cú pháp heredoc để định nghĩa chuỗi trong PHP.

Trong cú pháp heredoc, một mã định danh được cung cấp sau toán tử <<< này và ngay lập tức một dòng mới được bắt đầu để viết bất kỳ văn bản nào. Sử dụng mã định danh để đóng và lưu ý là không có bất kỳ khoảng trắng hoặc tab nào ở phía trước.

<?php
    $str = <<<Demo
It is the example 
of multiple 
lines of text.
Demo;

    echo $str;
?>

Đây là kết quả:

It is the example of multiple lines of text.

Heredoc tương tự như chuỗi trong cặp dấu nháy kép. Nó cũng có thể in giá trị của biến và các ký tự đặc biệt.

<?php
    $city = 'Delhi';
    $str = <<<DEMO
Hello! My name is Misthi, and I live in $city.
DEMO;
    echo $str;
?>

Đây là kết quả:

Hello! My name is Misthi, and I live in Delhi. 

Cú pháp newdoc

Khai báo newdoc tương tự như heredoc, chỉ khác ở chỗ mã định danh trong newdoc phải đặt trong cặp dấu nháy đơn.

Nếu heredoc tương tự như chuỗi trong cặp dấu nháy kép thì newdoc tương tự như chuỗi trong cặp dấu nháy đơn.

<?php
    $comdy = 'Comdy Technical';
    $str = <<<'DEMO'
Welcome to $comdy.
Learn with newdoc example.
DEMO;
    echo $str;
?>

Đây là kết quả:

Welcome to $comdy. Learn with newdoc example.
Lưu ý: newdoc được hỗ trợ bởi các phiên bản PHP 5.3.0+.

Ví dụ về chuỗi trong PHP

Sau đây là các ví dụ hợp lệ của chuỗi trong PHP:


$string_1 = "This is a string in double quotes";
$string_2 = "This is a somewhat longer, singly quoted string";
$string_39 = "This string has thirty-nine characters";
$string_0 = ""; // a string with zero characters

Các chuỗi nằm trong cặp dấu nháy đơn là các chuỗi đơn thuần, trong khi đó các chuỗi trong cặp dấu nháy đôi sẽ thay thế các biến bằng các giá trị của chúng cũng như hiển thị các ký tự đặc biệt.

Ví dụ sau sẽ minh họa điều này:

<?php
   $variable = "name";
   
   $literally = "My $variable will print!\n";   
   print($literally);
   
   $literally = 'My $variable will not print!\n';   
   print($literally);
?>

Đây là kết quả:

My name will print!
My $variable will not print!\n

Như bạn thấy ở ví dụ trên, chuỗi nằm trong cặp dấu nháy đơn không có bất kỳ xử lý gì với biến $variable và ký tự xuống dòng \n, nó xem chúng như là những ký tự bình thường.

Trong khi đó chuỗi nằm trong cặp dấu nháy kép sẽ thay thế biến $variable bằng giá trị của nó là "name" và hiển thị ký tự xuống dòng \n khi được in.

Không có giới hạn về độ dài chuỗi, bạn có thể tạo các chuỗi dài tùy ý miễn là trong giới hạn cho phép của bộ nhớ.

Các chuỗi được phân tách bằng dấu nháy kép được xử lý trước bởi PHP theo cả hai cách sau:

  • Một số ký tự bắt đầu bằng dấu gạch chéo ngược (\) được thay thế bằng các ký tự đặc biệt.
  • Tên biến (bắt đầu bằng $) được thay thế bằng giá trị của chúng.

Thay thế các ký tự đặc biệt như sau:

  • \n được thay thế bằng ký tự dòng mới.
  • \r được thay thế bằng ký tự trở lại đầu dòng.
  • \t được thay thế bằng ký tự tab.
  • \$ được thay thế bằng chính ký hiệu đô la ($).
  • \" được thay thế bằng một dấu nháy kép (").
  • \\ được thay thế bằng dấu gạch chéo ngược (\).

Bạn có thể xem chi tiết về chuỗi trong PHP tại bài viết sau:

Chuỗi trong PHP | Comdy
Chuỗi trong PHP là gì? Có bao nhiêu cách định nghĩa một chuỗi trong PHP. Các hàm chuỗi tích hợp sẵn trong PHP.

Hàm trong PHP

Sức mạnh thực sự của PHP đến từ các hàm của nó. PHP có hơn 1000 hàm tích hợp sẵn và ngoài ra, bạn có thể tạo các hàm tùy chỉnh của riêng mình.

Các hàm tích hợp sẵn của PHP

PHP có hơn 1000 hàm tích hợp sẵn có thể được gọi trực tiếp, từ bên trong một tập lệnh, để thực hiện một tác vụ cụ thể.

Vui lòng kiểm tra tài liệu tham khảo PHP của chúng tôi để biết tổng quan đầy đủ về các hàm tích hợp sẵn của PHP.

Hàm do người dùng định nghĩa PHP

Bên cạnh các hàm PHP tích hợp, bạn có thể tạo các hàm của riêng bạn.

  • Hàm là một khối các câu lệnh có thể được sử dụng nhiều lần trong một chương trình.
  • Một hàm sẽ không được thực thi tự động khi tải trang.
  • Một hàm  sẽ được thực thi bằng một cuộc gọi đến hàm.

Tạo một hàm do người dùng tự định nghĩa trong PHP

Một khai báo hàm do người dùng tự định nghĩa bắt đầu bằng từ khóa function:

Cú pháp

function functionName() {
    code to be executed;
}
Lưu ý: Tên hàm phải bắt đầu bằng chữ cái hoặc dấu gạch dưới. Tên hàm KHÔNG phân biệt chữ hoa chữ thường.
Mẹo: Nên đặt tên cho hàm phản ánh chức năng của hàm!

Trong ví dụ dưới đây, chúng tôi tạo ra một hàm có tên writeMsg. Dấu ngoặc nhọn mở ({) đại diện cho phần đầu của mã chức năng và dấu ngoặc nhọn đóng (}) đại diện cho phần cuối của hàm.

Hàm sẽ in dòng chữ "Hello world!". Để gọi hàm, chỉ cần viết tên của nó kèm theo cặp dấu ngoặc đơn () như sau:

<?php
    function writeMsg() {
        echo "Hello world!";
    }

    writeMsg(); // call the function
?>

Đây là kết quả:

Hello world!

Các đối số của hàm trong PHP

Thông tin có thể được truyền vào hàm thông qua các đối số. Một đối số giống như một biến.

Các đối số được chỉ định sau tên hàm, bên trong cặp dấu ngoặc đơn. Bạn có thể thêm bao nhiêu đối số tùy ý, chỉ cần phân tách chúng bằng dấu phẩy.

Ví dụ sau có một hàm với một đối số là $fname. Khi hàm familyName được gọi, chúng ta cần truyền một tên làm đối số của hàm (ví dụ Jani) và tên được sử dụng bên trong hàm như sau:

<?php
    function familyName($fname) {
        echo "$fname Refsnes.<br>";
    }

    familyName("Jani");
    familyName("Hege");
    familyName("Stale");
    familyName("Kai Jim");
    familyName("Borge");
?>

Đây là kết quả:

Jani Refsnes.
Hege Refsnes.
Stale Refsnes.
Kai Jim Refsnes.
Borge Refsnes.

Ví dụ sau tạo một hàm với hai đối số đầu vào là $fname$year:

<?php
    function familyName($fname, $year) {
        echo "$fname Refsnes. Born in $year <br>";
    }

    familyName("Hege", "1975");
    familyName("Stale", "1978");
    familyName("Kai Jim", "1983");
?>

Đây là kết quả:

Hege Refsnes. Born in 1975
Stale Refsnes. Born in 1978
Kai Jim Refsnes. Born in 1983

Bạn có thể xem chi tiết về hàm trong PHP tại bài viết sau:

Hàm trong PHP | Comdy
Cách tạo và sử dụng hàm trong PHP. Cách khai báo kiểu đối số và kiểu trả về của hàm trong PHP.

Kiểu số trong PHP

Trong phần này, chúng ta sẽ tìm hiểu sâu về kiểu integer, float và cách ép kiểu, ...

Một điều cần chú ý về PHP là nó cung cấp chuyển đổi kiểu dữ liệu tự động.

Vì vậy, nếu bạn gán một giá trị kiểu số nguyên cho một biến, kiểu dữ liệu của biến đó sẽ tự động là kiểu số nguyên.

Sau đó, nếu bạn tiếp tục gán một chuỗi cho cùng một biến đó, kiểu dữ liệu sẽ thay đổi thành kiểu chuỗi.

Việc chuyển đổi kiểu dữ liệu tự động này đôi khi có thể phá vỡ mã của bạn.

Bạn có thể xem chi tiết về kiểu số trong PHP tại bài viết sau:

Kiểu số trong PHP | Comdy
Trong bài viết này chúng ta sẽ tìm hiểu sâu về kiểu integer, float và cách ép kiểu, ... trong PHP.

Biến siêu toàn cục trong PHP

Biến siêu toàn cục là gì?

Biến siêu toàn cục (Superglobals) đã được giới thiệu trong PHP 4.1.0 và là các biến tích hợp luôn có sẵn trong tất cả các phạm vi.

Một số biến siêu toàn cục trong PHP có nghĩa là chúng luôn có thể truy cập được, bất kể phạm vi - và bạn có thể truy cập chúng từ bất kỳ chức năng, lớp hoặc file nào mà không phải làm gì đặc biệt.

Các biến siêu toàn cục của PHP là:

  • $GLOBALS
  • $_SERVER
  • $_REQUEST
  • $_POST
  • $_GET
  • $_FILES
  • $_ENV
  • $_COOKIE
  • $_SESSION

Bạn có thể xem chi tiết về biến toàn cụ trong PHP tại bài viết sau:

Biến toàn cục trong PHP | Comdy
Biến siêu toàn cục trong PHP là gì? Cách khai báo và sử dụng các biến siêu toàn cục trong PHP.

Xử lý form trong PHP

Các biến siêu toàn cục $_GET$_POST trong PHP được sử dụng để thu thập dữ liệu biểu mẫu (form).

Xử lý form trong PHP

Ví dụ dưới đây hiển thị một biểu mẫu HTML đơn giản với hai trường đầu vào (NameE-mail) và nút gửi (Submit):

<html>

<body>

    <form action="welcome.php" method="post">
        Name:
        <input type="text" name="name">
        <br> E-mail:
        <input type="text" name="email">
        <br>
        <input type="submit">
    </form>

</body>

</html>

Đây là kết quả:

Form đơn giản trong HTML

Khi người dùng điền vào biểu mẫu ở trên và nhấp vào nút gửi, dữ liệu biểu mẫu được gửi đến file PHP có tên là "welcome.php" để xử lý. Dữ liệu biểu mẫu được gửi bằng phương thức HTTP POST.

Để hiển thị dữ liệu đã gửi, bạn chỉ cần duyệt qua tất cả các trường đầu vào (thuộc tính name của thẻ input) bằng cách sử dụng biến siêu toàn cục $_POST. File "welcome.php" trông sẽ như thế này:

<html>

<body>

    Welcome <?php echo $_POST["name"]; ?>
    <br> Your email address is: <?php echo $_POST["email"]; ?>

</body>

</html>

Đầu ra có thể là một cái gì đó như thế này:

Welcome Trung Nguyen
Your email address is trung.nguyen@example.com

Kết quả tương tự cũng có thể đạt được bằng phương pháp HTTP GET:

<html>

<body>

    <form action="welcome_get.php" method="get">
        Name:
        <input type="text" name="name">
        <br> E-mail:
        <input type="text" name="email">
        <br>
        <input type="submit">
    </form>

</body>

</html>

File "welcome_get.php" trông sẽ như thế này:

<html>

<body>

    Welcome <?php echo $_GET["name"]; ?>
    <br> Your email address is: <?php echo $_GET["email"]; ?>

</body>

</html>

Mã ở trên khá đơn giản. Tuy nhiên, một điều quan trọng còn thiếu là xác thực dữ liệu đầu vào do người dùng nhập. Bạn cần xác thực dữ liệu biểu mẫu để bảo vệ tập lệnh của bạn khỏi mã độc.

Hãy đảm bảo tính BẢO MẬT khi xử lý các biểu mẫu PHP!

Trang này không chứa bất kỳ xác thực biểu mẫu nào, nó chỉ hiển thị cách bạn có thể gửi và truy xuất dữ liệu biểu mẫu.

Tuy nhiên, các trang tiếp theo sẽ chỉ ra cách xử lý các biểu mẫu PHP với tính bảo mật! Xác thực hợp lệ dữ liệu biểu mẫu là rất quan trọng để bảo vệ biểu mẫu của bạn khỏi tin tặc và kẻ gửi thư rác!

Bạn có thể xem chi tiết về xử lý form trong PHP tại bài viết sau:

Xử lý form trong PHP | Comdy
Hướng dẫn xử lý biểu mẫu (form) trong PHP. Sự khác nhau giữa POST và GET và khi nào nên dùng chúng.

Xác thực biểu mẫu (form) trong PHP

Hãy đảm bảo tính BẢO MẬT khi xử lý các biểu mẫu PHP!
Chương này sẽ chỉ ra cách xử lý các biểu mẫu PHP một cách an toàn. Xác thực dữ liệu biểu mẫu hợp lệ thì rất quan trọng để bảo vệ biểu mẫu của bạn khỏi tin tặc và kẻ gửi thư rác!

Biểu mẫu HTML mà chúng tôi sẽ làm việc trong chương này, chứa các trường nhập dữ liệu khác nhau như: các trường văn bản bắt buộc và tùy chọn, nút radio và nút gửi như sau:

Xác thực biểu mẫu form trong PHP

Các quy tắc xác thực dữ liệu cho các trường của biểu mẫu ở trên như sau:

Trường Quy tắc xác thực
Name Bắt buộc nhập + Chỉ được chứa các chữ cái và khoảng trắng.
E-mail Bắt buộc nhập + Phải chứa địa chỉ email hợp lệ (có @ và.).
Website Không bắt buộc. Nếu có, nó phải chứa một URL hợp lệ.
Comment Không bắt buộc. Trường nhập nhiều dòng (textarea).
Gender Bắt buộc nhập. Phải chọn một.

Trường văn bản

Các trường Name, Email và Website là các trường nhập văn bản, trường Comment là một vùng nhập văn bản. Mã HTML trông như thế này:


Name: <input type="text" name="name">
E-mail: <input type="text" name="email">
Website: <input type="text" name="website">
Comment: <textarea name="comment" rows="5" cols="40"></textarea>

Nút radio

Các trường Gender là các nút radio và mã HTML trông như thế này:

Gender:
<input type="radio" name="gender" value="female">Female
<input type="radio" name="gender" value="male">Male
<input type="radio" name="gender" value="other">Other

Phần tử biểu mẫu

Mã HTML của biểu mẫu (form) trông như thế này:


<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

Dữ liệu của biểu mẫu sẽ được gửi với phương thức "POST".

Biến $_SERVER["PHP_SELF"] là gì?
$_SERVER["PHP_SELF"] là một biến siêu toàn cục trả về tên file của tập lệnh hiện đang thực thi.

Vì vậy, $_SERVER["PHP_SELF"] sẽ gửi dữ liệu biểu mẫu đến chính trang đó, thay vì chuyển đến một trang khác. Bằng cách này, người dùng sẽ nhận được thông báo lỗi trên cùng một trang với biểu mẫu.

Hàm htmlspecialchars() là gì?
Hàm htmlspecialchars() chuyển đổi các ký tự đặc biệt thành các ký tự mã hóa HTML. Điều này có nghĩa là nó sẽ thay thế các ký tự HTML như < và > bằng &lt; và &gt;. Điều này ngăn chặn kẻ tấn công khai thác mã bằng cách tiêm mã HTML hoặc Javascript (tấn công Cross-site Scripting) vào các biểu mẫu.

Bạn có thể xem chi tiết về xác thực biểu mẫu (form) trong PHP tại bài viết sau:

Xác thực biểu mẫu (form) trong PHP | Comdy
Hướng dẫn bạn cách xác thực biểu mẫu (form) trong PHP và chống các kiểu tấn công XSS phổ biến.

Câu lệnh include và require trong PHP

Câu lệnh include (hoặc require) lấy tất cả văn bản / mã / thẻ trong file được chỉ định và sao chép nó vào file đã sử dụng câu lệnh include.

Câu lệnh include file rất hữu ích khi bạn muốn sử dụng cùng một tập lệnh PHP, mã HTML hoặc văn bản trên nhiều trang của một trang web.

Câu lệnh include và require trong PHP

Bạn có thể chèn nội dung của một file PHP vào một file PHP khác (trước khi máy chủ thực thi nó) bằng câu lệnh include hoặc require.

Câu lệnh include và require thì giống hệt nhau, chỉ khác khi xảy ra lỗi:

  • Câu lệnh require sẽ tạo ra một lỗi nghiêm trọng (E_COMPILE_ERROR) và dừng tập lệnh.
  • Câu lệnh include sẽ chỉ tạo cảnh báo (E_WARNING) và tập lệnh sẽ tiếp tục.

Vì vậy, nếu bạn muốn tiếp tục thực thi và hiển thị cho người dùng đầu ra, ngay cả khi tệp được thêm vào bị thiếu, hãy sử dụng câu lệnh include.

Ngược lại, trong trường hợp FrameWork, CMS hoặc viết những ứng dụng PHP phức tạp, hãy luôn sử dụng câu lệnh require để đưa các tệp chính vào luồng thực thi.

Điều này sẽ giúp tránh ảnh hưởng đến tính bảo mật và tính toàn vẹn của ứng dụng của bạn, nhất là trong trường hợp một tệp chính vô tình bị thiếu.

Việc cho phép chèn các tập tin vào tập tin khác giúp tiết kiệm rất nhiều thời gian và công việc.

Điều này có nghĩa là bạn có thể tạo một file tiêu đề, chân trang hoặc menu tiêu chuẩn và chèn chúng vào tất cả các trang web của bạn. Sau này, nếu tiêu đề thay đổi thì bạn chỉ cần cập nhật file tiêu đề thay vì phải vào từng trang để cập nhật.

Cú pháp

include 'filename';

//or

require 'filename';

Bạn có thể xem chi tiết về include và require trong PHP tại bài viết sau:

Câu lệnh include và require trong PHP | Comdy
Câu lệnh include và require trong PHP dùng để làm gì? Câu lệnh include và require khác nhau như thế nào?

Cookie thường được sử dụng để xác định người dùng. Cookie là một file nhỏ mà máy chủ nhúng vào máy tính của người dùng.

Mỗi lần người dùng sử dụng trình duyệt truy cập website, máy chủ sẽ gửi cookie về máy tính người dùng. Với PHP, bạn có thể tạo và đọc các giá trị cookie rất dễ dàng.

Tạo Cookies bằng PHP

Hàm setcookie() trong PHP sẽ được sử dụng để tạo cookie.

Cú pháp


setcookie(name, value, expire, path, domain, secure, httponly);

Chỉ tham số name là bắt buộc. Tất cả các thông số khác là tùy chọn.

Bạn có thể xem chi tiết về cookie trong PHP tại bài viết sau:

Cookie trong PHP | Comdy
Cookie là gì? Các thao tác với cookie trong PHP như: tạo cookie, đọc cookie, cập nhật giá trị của cookie, ...

Session trong PHP

Session (phiên) là một cách để lưu trữ thông tin (trong các biến) sẽ được sử dụng trên nhiều trang.

Không giống như cookie, session không được lưu trữ trên máy tính của người dùng.

Session trong PHP là gì?

Khi bạn truy cập ứng dụng web bằng trình duyệt rồi thực hiện một số thay đổi nào đó và sau đó bạn đóng nó lại. Điều này giống như một session (phiên).

Một session tạo một file trong một thư mục tạm trên máy chủ nơi các biến session đã đăng ký và giá trị của chúng được lưu trữ ở đó. Dữ liệu này sẽ có sẵn cho tất cả các trang trên website trong lần truy cập đó.

Vị trí của file tạm được xác định bởi một cấu hình trong tệp php.ini có tên là session.save_path. Trước khi sử dụng bất kỳ biến session nào, hãy đảm bảo bạn đã thiết lập đường dẫn này.

Khi một session được bắt đầu những điều sau đây sẽ xảy ra:

  • Trước tiên, PHP tạo một mã định danh duy nhất cho session đó. Nó là một chuỗi ngẫu nhiên gồm 32 số thập lục phân, chẳng hạn như 3c7foj34c3jj973hjkop2fc937e3443.
  • Một cookie có tên PHPSESSID sẽ tự động được gửi đến máy tính của người dùng để lưu trữ chuỗi nhận dạng session.
  • Một file được tự động tạo trên máy chủ trong thư mục tạm được chỉ định và tên của file là mã định danh session có tiền tố là sess_ tức là sess_3c7foj34c3jj973hjkop2fc937e3443.

Khi tập lệnh PHP muốn truy xuất giá trị từ biến session, PHP sẽ tự động lấy chuỗi số nhận dạng session từ ​​cookie PHPSESSID và sau đó tìm file session trong thư mục tạm.

Một phiên kết thúc khi người dùng tắt trình duyệt hoặc sau khi rời khỏi trang web, máy chủ sẽ chấm dứt phiên sau một khoảng thời gian xác định trước, thường là 30 phút.

Bạn có thể xem chi tiết về session trong PHP tại bài viết sau:

Session trong PHP | Comdy
Session trong PHP là gì? Session trong PHP được sử dụng để làm gì? Cách khai báo và sử dụng session trong PHP

Hướng đối tượng (OOP) trong PHP

Từ PHP5, bạn đã có thể viết mã PHP theo kiểu hướng đối tượng. Lập trình hướng đối tượng thì nhanh hơn và dễ thực hiện hơn.

Hướng đối tượng (OOP) trong PHP là gì?

OOP là viết tắt của object-oriented programming (Lập trình hướng đối tượng).

Nếu như lập trình thủ tục tập trung vào việc viết các thủ tục hoặc hàm thì lập trình hướng đối tượng tập trung vào việc tạo các đối tượng chứa cả dữ liệu và hàm.

Lập trình hướng đối tượng có một số lợi thế so với lập trình thủ tục:

  • OOP nhanh hơn và dễ thực hiện hơn.
  • OOP cung cấp một cấu trúc rõ ràng cho các chương trình.
  • OOP giúp giữ mã PHP DRY "Don't Repeat Yourself" và làm cho mã dễ dàng duy trì, sửa đổi và gỡ lỗi.
  • OOP cho phép tạo các ứng dụng có thể tái sử dụng đầy đủ với ít mã hơn và thời gian phát triển ngắn hơn
Mẹo: Nguyên tắc DRY là về việc giảm sự lặp lại của mã. Bạn nên chuyển những phần mã được sử dụng phổ biến trong ứng dụng vào các hàm và sử dụng lại chúng thay vì lặp lại nó.

Lớp và đối tượng trong PHP là gì?

Các lớp và các đối tượng là hai khía cạnh chính của lập trình hướng đối tượng.

Nhìn vào hình minh họa sau để thấy sự khác biệt giữa lớp và các đối tượng:

class objects
fruit apple
mango
banana

Một ví dụ khác:

class objects
car vinfast
audi
toyota

Vì vậy, một lớp là một khuôn mẫu cho các đối tượng và một đối tượng là một thể hiện của một lớp.

Khi các đối tượng riêng lẻ được tạo, chúng kế thừa tất cả các thuộc tính và hành vi từ lớp, nhưng mỗi đối tượng sẽ có các giá trị khác nhau cho các thuộc tính.

Như ở ví dụ trên trái cây có thể có các thuộc tính như name, color, weight, v.v. Chúng ta có thể định nghĩa lớp fruit có các biến như $name, $color và $weight để lưu trữ các giá trị của các thuộc tính này.

Khi các đối tượng riêng lẻ như: apple, mango, banana, v.v được tạo, chúng kế thừa tất cả các thuộc tính và hành vi từ lớp fruit, nhưng mỗi đối tượng sẽ có các giá trị khác nhau cho các thuộc tính.

Tạo lớp trong PHP

Một lớp được định nghĩa bằng cách sử dụng từ khóa class, theo sau là tên của lớp và một cặp dấu ngoặc nhọn ({}). Tất cả các thuộc tính và phương thức của nó đặt ở bên trong cặp dấu ngoặc nhọn:

<?php
    class Fruit {
      // code goes here...
    }
?>

Dưới đây chúng tôi khai báo một lớp có tên Fruit bao gồm hai thuộc tính ($name và $color) và hai phương thức set_name() và get_name() để thiết lập và trả về giá trị của thuộc tính $name:

<?php
    class Fruit {
        // Properties
        public $name;
        public $color;

        // Methods
        function set_name($name) {
            $this->name = $name;
        }
        
        function get_name() {
            return $this->name;
        }
    }
?>
Lưu ý: Trong một lớp, các biến được gọi là thuộc tính và hàm được gọi là phương thức!

Tạo đối tượng trong PHP

Các lớp không là gì nếu không có đối tượng! Chúng ta có thể tạo nhiều đối tượng từ một lớp. Mỗi đối tượng sẽ có tất cả các thuộc tính và phương thức được định nghĩa trong lớp, nhưng chúng sẽ có các giá trị thuộc tính khác nhau.

Các đối tượng của một lớp được tạo bằng cách sử dụng từ khóa new.

Trong ví dụ dưới đây, $apple và $banana là các thể hiện của lớp Fruit:

<?php
    class Fruit {
        // Properties
        public $name;
        public $color;

        // Methods
        function set_name($name) {
            $this->name = $name;
        }
        
        function get_name() {
            return $this->name;
        }
    }

    $apple = new Fruit();
    $banana = new Fruit();
    $apple->set_name('Apple');
    $banana->set_name('Banana');

    echo $apple->get_name();
    echo "<br>";
    echo $banana->get_name();
?>

Đây là kết quả:

Apple
Banana

Trong ví dụ dưới đây, chúng tôi thêm hai phương thức nữa vào lớp Fruit, để thiết lập và trả về giá trị của thuộc tính $color:

<?php
    class Fruit {
        // Properties
        public $name;
        public $color;

        // Methods
        function set_name($name) {
            $this->name = $name;
        }
        
        function get_name() {
            return $this->name;
        }
        
        function set_color($color) {
            $this->color = $color;
        }
        
        function get_color() {
            return $this->color;
        }
    }

    $apple = new Fruit();
    $apple->set_name('Apple');
    $apple->set_color('Red');
    echo "Name: " . $apple->get_name();
    echo "<br>";
    echo "Color: " . $apple->get_color();
?>

Đây là kết quả:

Name: Apple
Color: Red

Bạn có thể xem chi tiết về hướng đối tượng (OOP) trong PHP tại bài viết sau:

Lập trình hướng đối tượng (OOP) trong PHP | Comdy
Lập trình hướng đối tượng (OOP) trong PHP là gì? Làm sao để áp dụng lập trình hướng đối tượng trong PHP.

Kế thừa trong PHP

Kế thừa là gì?

Kế thừa (inheritance) là khả năng tạo một lớp mới dựa trên một lớp có sẵn. Lớp có sẵn là lớp cha, lớp mới là lớp con và lớp con thừa kế các thành phần được định nghĩa ở lớp cha.

Lớp con sẽ kế thừa tất cả các thuộc tính và phương thức có chỉ thị truy cập là public và protected từ lớp cha. Ngoài ra, nó có thể có các thuộc tính và phương thức của riêng nó.

Một lớp kế thừa được định nghĩa bằng cách sử dụng từ khóa extends.

Ví dụ sau minh họa kế thừa trong PHP:

<?php
    class Fruit {
        public $name;
        public $color;
        
        public function __construct($name, $color) {
            $this->name = $name;
            $this->color = $color;
        }
        
        public function intro() {
            echo "The fruit is {$this->name} and the color is {$this->color}.";
        }
    }

    // Strawberry is inherited from Fruit
    class Strawberry extends Fruit {
        public function message() {
            echo "Am I a fruit or a berry? ";
        }
    }
    $strawberry = new Strawberry("Strawberry", "red");
    $strawberry->message();
    $strawberry->intro();
?>

Đây là kết quả:

Am I a fruit or a berry? The fruit is Strawberry and the color is red.

Như bạn đã thấy ở ví dụ trên, lớp Strawberry được kế thừa từ lớp Fruit.

Điều này có nghĩa là lớp Strawberry có thể sử dụng các thuộc tính public là $name$color  cũng như các phương thức public __construct() và intro() từ lớp Fruit vì tính kế thừa.

Lớp Strawberry cũng có phương thức riêng của nó là message().

Bạn có thể xem chi tiết về kế thừa (inheritance) trong PHP tại bài viết sau:

Kế thừa trong PHP | Comdy
Kế thừa (inheritance) trong PHP là gì? Làm sao để khai báo và sử dụng kế thừa trong PHP.

Abstract class trong PHP

Abstract class là gì?

Lớp trừu tượng (abstract class) là 1 lớp có những đặc điểm sau:

  • Lớp này có các phương thức trừu tượng.
  • Các lớp khác khi kế thừa lớp trừu tượng sẽ phải định nghĩa các phương thức trừu tượng ấy.
  • Một lớp chỉ có thể kế thừa 1 lớp trừu tượng.

Một lớp trừu tượng là một lớp chứa ít nhất một phương thức trừu tượng. Một phương thức trừu tượng là một phương thức được khai báo, nhưng không được triển khai trong mã.

Bạn có thể xem chi tiết về abstract class trong PHP tại bài viết sau:

Abstract class trong PHP | Comdy
Abstract class là gì? Abstract class dùng để làm gì? Làm sao khai báo và sử dụng abstract class trong PHP.

Sử dụng traits trong PHP

Giảm thiểu sao chép mã thông qua tổ chức tốt hơn và tái sử dụng mã là mục tiêu quan trọng của lập trình hướng đối tượng.

Nhưng trong PHP đôi khi bạn có thể gặp khó khăn vì những hạn chế của mô hình đơn kế thừa mà nó sử dụng; bạn có một số phương thức mà bạn muốn sử dụng trong nhiều lớp nhưng chúng không thể kế thừa từ nhiều lớp.

Các ngôn ngữ như C++Python cho phép chúng ta kế thừa từ nhiều lớp để giải quyết vấn đề này ở một mức độ nào đó và mixins trong Ruby cho phép chúng ta trộn chức năng của một hoặc nhiều lớp mà không cần sử dụng kế thừa.

Nhưng đa kế thừa có nhiều vấn đề chẳng hạn như Diamond Problem và mixins có thể là một cơ chế quá phức tạp để giải quyết vấn đề.

Trong bài viết này chúng ta sẽ thảo luận về traits, một tính năng mới được giới thiệu trong PHP 5.4 để khắc phục các vấn đề như vậy.

Khái niệm về traits tự nó không có gì mới đối với lập trình và được sử dụng trong các ngôn ngữ khác như Scala và Perl. Chúng cho phép chúng ta sử dụng lại mã theo chiều ngang trên các lớp độc lập trong các phân cấp lớp khác nhau.

Bạn có thể xem chi tiết về sử dụng traits trong PHP tại bài viết sau:

Sử dụng traits trong PHP | Comdy
Traits trong PHP là gì? Làm sao để sử dụng traits hiệu quả, tránh xung đột trong PHP?

Làm việc với MySQL trong PHP

Với PHP, bạn có thể dễ dàng kết nối và thao tác với cơ sở dữ liệu.

MySQL là hệ thống cơ sở dữ liệu phổ biến nhất được sử dụng với PHP.

MySQL là gì?

  • MySQL là một hệ thống cơ sở dữ liệu được sử dụng trên web.
  • MySQL là một hệ thống cơ sở dữ liệu chạy trên máy chủ.
  • MySQL là lý tưởng cho cả ứng dụng nhỏ và lớn.
  • MySQL rất nhanh, đáng tin cậy và dễ sử dụng.
  • MySQL sử dụng SQL chuẩn.
  • MySQL là đa nền tảng
  • MySQL là miễn phí để tải về và sử dụng.
  • MySQL được phát triển, phân phối và hỗ trợ bởi tập đoàn Oracle.
  • MySQL được đặt theo tên con gái của người đồng sáng lập Monty Widenius: My.

Dữ liệu trong cơ sở dữ liệu MySQL được lưu trữ trong các bảng. Bảng là tập hợp các dữ liệu liên quan và nó bao gồm các cột và hàng.

Cơ sở dữ liệu rất hữu ích để lưu trữ thông tin theo loại. Ví dụ: một cửa hàng có thể có một cơ sở dữ liệu với các bảng sau:

  • Employees
  • Products
  • Categories
  • Customers
  • Orders
  • OrderItems
  • ...

Kết nối PHP với MySQL

PHP 5 trở lên có thể thao tác với cơ sở dữ liệu MySQL bằng cách sử dụng:

  • Phần mở rộng của MySQLi (chữ "i" là viết tắt của improved - cải tiến)
  • PDO (PHP Data Objects - Đối tượng dữ liệu PHP)
Lưu ý: Các phiên bản trước đây của PHP sử dụng phần mở rộng MySQL để thao tác với cơ sở dữ liệu MySQL. Tuy nhiên, phần mở rộng MySQL này đã lỗi thời từ năm 2012.

Tôi nên sử dụng MySQLi hay PDO?

Nếu bạn cần một câu trả lời ngắn, đó sẽ là "làm bất cứ điều gì bạn thích".

Cả MySQLi và PDO đều có những ưu điểm của chúng:

PDO sẽ hoạt động trên 12 hệ thống cơ sở dữ liệu khác nhau, trong khi MySQLi sẽ chỉ hoạt động với cơ sở dữ liệu MySQL.

Vì vậy, nếu bạn phải chuyển dự án của mình sang sử dụng cơ sở dữ liệu khác, PDO sẽ giúp quá trình này trở nên dễ dàng. Bạn chỉ phải thay đổi chuỗi kết nối và một vài truy vấn. Với MySQLi, bạn sẽ cần viết lại toàn bộ mã - bao gồm các truy vấn.

Cả hai đều hướng đối tượng, nhưng MySQLi cũng cung cấp API thủ tục.

Cả hai đều hỗ trợ Prepared Statements. Prepared Statements bảo vệ khỏi SQL injection và rất quan trọng đối với bảo mật ứng dụng web.

Cài đặt MySQLi

Đối với Linux và Windows: Phần mở rộng MySQLi được cài đặt tự động trong hầu hết các trường hợp, khi gói php5 mysql được cài đặt.

Để biết chi tiết cài đặt, hãy truy cập: http://php.net/manual/en/mysqli.installation.php

Cài đặt PDO

Để biết chi tiết cài đặt, hãy truy cập: http://php.net/manual/en/pdo.installation.php

Bạn có thể xem chi tiết về làm việc với cơ sở dữ liệu MySQL trong PHP tại bài viết sau:

Làm việc với MySQL trong PHP | Comdy
MySQL là gì? Làm việc với MySQL trong PHP. Hướng dẫn kết nối, tạo database, tạo bảng MySQL trong PHP.

Thêm dữ liệu vào MySQL trong PHP

Thêm dữ liệu vào MySQL bằng MySQLi và PDO

Sau khi tạo cơ sở dữ liệu và các bảng, chúng ta có thể bắt đầu thêm dữ liệu vào chúng.

Dưới đây là một số quy tắc cú pháp để làm theo:

  • Truy vấn SQL phải được đặt trong cặp dấu nháy kép trong PHP.
  • Các giá trị chuỗi bên trong truy vấn SQL phải được đặt trong cặp dấu nháy đơn.
  • Các giá trị số không được đặt trong cặp dấu nháy đơn.
  • Giá trị NULL không được đặt trong cặp dấu nháy đơn.

Câu lệnh INSERT INTO được sử dụng để thêm các bản ghi mới vào bảng MySQL:

INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)

Bạn có thể xem chi tiết về thêm dữ liệu vào cơ sở dữ liệu MySQL trong PHP tại bài viết sau:

Thêm dữ liệu vào MySQL trong PHP | Comdy
Hướng dẫn này sẽ giúp bạn tìm hiểu cách thêm dữ liệu vào MySQL sử dụng MySQLi và PDO trong PHP.

MySQL prepared statements trong PHP

Các câu lệnh được chuẩn bị (prepared statements) rất hữu ích để chống lại các cuộc tấn công SQL Injection.

Chuẩn bị câu lệnh và liên kết tham số

Một câu lệnh được chuẩn bị (prepared statement) là một tính năng được sử dụng để thực thi các câu lệnh SQL giống nhau (hoặc tương tự) lặp đi lặp lại với hiệu quả cao.

Một câu lệnh được chuẩn bị về cơ bản hoạt động như thế này:

  1. Chuẩn bị: Một mẫu câu lệnh SQL được tạo và gửi đến cơ sở dữ liệu. Một số giá trị nhất định không được chỉ định mà thay bằng các ký tự ? (được gọi là tham số). Ví dụ: INSERT INTO MyGuests VALUES(?, ?, ?)
  2. Cơ sở dữ liệu sẽ phân tích cú pháp, biên dịch và thực hiện tối ưu hóa truy vấn trên mẫu câu lệnh SQL và lưu trữ kết quả biên dịch mà không thực thi nó.
  3. Thực thi: Sau đó, ứng dụng liên kết các giá trị với các tham số và cơ sở dữ liệu thực thi câu lệnh. Ứng dụng có thể thực thi câu lệnh bao nhiêu lần tùy ý với các giá trị khác nhau

So với việc thực thi trực tiếp các câu lệnh SQL, các câu lệnh được chuẩn bị có ba ưu điểm chính:

  • Các câu lệnh được chuẩn bị giúp giảm thời gian phân tích cú pháp vì việc chuẩn bị truy vấn chỉ được thực hiện một lần (mặc dù câu lệnh được thực thi nhiều lần)
  • Liên kết các tham số giúp thu nhỏ băng thông đến máy chủ vì bạn chỉ cần gửi các tham số mỗi lần truy vấn thay vì phải gửi toàn bộ truy vấn.
  • Các câu lệnh được chuẩn bị rất hữu ích để chống lại SQL Injection. Bởi vì các giá trị tham số được truyền vào sau bằng một giao thức khác, không cần phải lọc các ký tự đặc biệt. Nếu mẫu câu lệnh gốc không xuất phát từ dữ liệu đầu vào từ bên ngoài, SQL Injection không thể xảy ra.

Bạn có thể xem chi tiết về các câu lệnh được chuẩn bị trong cơ sở dữ liệu MySQL trong PHP tại bài viết sau:

MySQL prepared statements trong PHP
MySQL prepared statements trong PHP rất hữu ích để chống lại các cuộc tấn công SQL Injection.


Bài viết liên quan:

Hướng dẫn cách truy xuất, lọc, sắp xếp dữ liệu MySQL trong PHP sử dụng MySQLi và PDO.

MySQL prepared statements trong PHP rất hữu ích để chống lại các cuộc tấn công SQL Injection.

Hướng dẫn này sẽ giúp bạn tìm hiểu cách thêm dữ liệu vào MySQL sử dụng MySQLi và PDO trong PHP.