Mô tả tham gia bên trái. MySQL THAM GIA: mô tả, ví dụ về cách sử dụng lệnh và đề xuất

Lý do viết bài này là do một số cuộc tranh luận trong một trong các nhóm linkedin liên quan đến MySQL, cũng như giao tiếp với đồng nghiệp và người dân Habro :-)

Trong bài viết này, tôi muốn viết chung về JOIN trong MySQL và cách bạn có thể tối ưu hóa các truy vấn với chúng.

THAM GIA trong MySQL là gì

Trong MySQL, thuật ngữ JOIN được sử dụng rộng rãi hơn bạn nghĩ. Ở đây, THAM GIA không chỉ có thể được gọi là một truy vấn kết hợp các kết quả từ một số bảng mà còn là một truy vấn đến một bảng, ví dụ: CHỌN trên một bảng cũng là một phép nối.

Điều này là do thuật toán thực thi nối trong MySQL được triển khai bằng các vòng lặp lồng nhau. Những thứ kia. Mỗi JOIN tiếp theo là một vòng lặp lồng nhau bổ sung. Để thực hiện một truy vấn và trả về tất cả các bản ghi thỏa mãn một điều kiện, MySQL thực hiện một vòng lặp và chạy song song qua các bản ghi của bảng đầu tiên, kiểm tra xem có tuân thủ các điều kiện được mô tả trong nội dung yêu cầu hay không khi tìm thấy các bản ghi thỏa mãn yêu cầu; các điều kiện, một vòng lặp lồng nhau qua bảng thứ hai sẽ tìm kiếm các bản ghi khớp với bảng thứ nhất và thỏa mãn các điều kiện kiểm tra, v.v. .d.

Ví dụ về truy vấn thông thường với INNER JOIN

LỰA CHỌN
*
TỪ
Bảng 1
THAM GIA TRONG
Bảng2 TRÊN P1(Bảng1,Bảng2)
THAM GIA TRONG
Bảng3 TRÊN P2(Bảng2,Bảng3)
Ở ĐÂU
P(Bảng1,Bảng2,Bảng3).

Where P - điều kiện để hợp nhất các bảng và bộ lọc trong điều kiện WHERE.

Bạn có thể tưởng tượng mã giả sau đây để thực hiện một yêu cầu như vậy.

CHO mỗi hàng t1 trong Bảng 1 (
IF(P(t1)) (
CHO mỗi hàng t2 trong Bảng2 (
IF(P(t2)) (
CHO mỗi hàng t3 trong Bảng 3 (
NẾU P(t3) (
t:=t1||t2||t3; ĐẦU RA t;
}
}
}
}
}
}

* Mã nguồn này đã được đánh dấu bằng Công cụ đánh dấu mã nguồn.

Trong đó cấu trúc t1||t2||t3 có nghĩa là nối các cột từ các bảng khác nhau.

Nếu truy vấn chứa OUTER JOIN, ví dụ: LEFT OUTER JOIN

LỰA CHỌN
*
TỪ
Bảng 1
CHỖ NỐI BÊN TRÁI
Bảng2 THAM GIA TRÁI Bảng3 TRÊN P2(Bảng2,Bảng3)
TRÊN P1(Bảng1,Bảng2)
Ở ĐÂU
P(Bảng1,Bảng2,Tabke3)

* Mã nguồn này đã được đánh dấu bằng Công cụ đánh dấu mã nguồn.

Khi đó thuật toán thực hiện truy vấn MySQL này sẽ trông giống như thế này

CHO mỗi hàng t1 trong T1 (
BOOL f1:=FALSE;
CHO mỗi hàng t2 trong T2 sao cho P1(t1,t2) (
BOOL f2:=FALSE;
CHO mỗi hàng t3 trong T3 sao cho P2(t2,t3) (
NẾU P(t1,t2,t3) (
t:=t1||t2||t3; ĐẦU RA t;
}
f2=ĐÚNG;
f1=ĐÚNG;
}
NẾU (!f2) (
NẾU P(t1,t2,NULL) (
t:=t1||t2||NULL; ĐẦU RA t;
}
f1=ĐÚNG;
}
}
NẾU (!f1) (
NẾU P(t1,NULL,NULL) (
t:=t1||NULL||NULL; ĐẦU RA t;
}
}
}

* Mã nguồn này đã được đánh dấu bằng Công cụ đánh dấu mã nguồn.

Vì vậy, như chúng ta có thể thấy, THAM GIA chỉ là một nhóm các vòng lặp lồng nhau. Vậy tại sao UNION, SELECT và các truy vấn bằng SUBQUERY cũng tham gia vào MySQL?

Trình tối ưu hóa MySQL cố gắng đưa các truy vấn về dạng thuận tiện hơn cho việc xử lý và thực hiện các truy vấn theo sơ đồ tiêu chuẩn.

Với SELECT mọi thứ đều rõ ràng - chỉ là một vòng lặp không có vòng lặp lồng nhau. Tất cả UNION được thực thi như yêu cầu cá nhân và kết quả được thêm vào một bảng tạm thời, sau đó MySQL hoạt động với bảng này, tức là. lặp qua các bản ghi trong đó. Câu chuyện tương tự với Subquery.

Ví dụ: bằng cách đưa mọi thứ vào một mẫu, MySQL viết lại tất cả các truy vấn RIGHT JOIN với các giá trị tương đương LEFT JOIN.

Nhưng chiến lược thực hiện các truy vấn thông qua các vòng lặp lồng nhau đặt ra một số hạn chế, ví dụ, do sơ đồ này, MySQL không hỗ trợ thực hiện các truy vấn FULL OUTER JOIN.

Nhưng kết quả của truy vấn như vậy có thể thu được bằng cách sử dụng UNION của hai truy vấn trên LEFT JOIN và RIGHT JOIN
Bạn có thể xem ví dụ về yêu cầu đó tại liên kết wiki.

THAM GIA Kế hoạch thực hiện truy vấn

Không giống như các RDBMS khác, MySQL không tạo mã byte để thực hiện truy vấn; thay vào đó, MySQL tạo danh sách các câu lệnh ở dạng cây mà công cụ thực thi truy vấn tuân theo khi thực hiện truy vấn.
Cây này có lượt xem tiếp theo và có tên là “cây sâu trái”

không giống cây cân bằng(Gói Bushy), được sử dụng trong các DBMS khác (ví dụ: Oracle)

THAM GIA tối ưu hóa

Bây giờ chúng ta hãy chuyển sang phần thú vị nhất - tối ưu hóa việc tham gia.
Trình tối ưu hóa MySQL, cụ thể là phần chịu trách nhiệm tối ưu hóa THAM GIA, chọn thứ tự các bảng hiện có sẽ được hợp nhất, bởi vì bạn có thể nhận được kết quả tương tự (tập dữ liệu) khi theo thứ tự khác nhau bảng trong dán. Trình tối ưu hóa MySQL đánh giá chi phí của các gói khác nhau và chọn gói có chi phí thấp nhất. Đơn vị đánh giá là hoạt động đọc một trang dữ liệu 4 kilobyte từ một vị trí ngẫu nhiên trên đĩa.

Đối với gói đã chọn, bạn có thể tìm hiểu chi phí bằng cách thực hiện lệnh

HIỂN THỊ TRẠNG THÁI PHIÊN THÍCH "Last_query_cost";

Ước tính này dựa trên số liệu thống kê: số lượng trang bộ nhớ mà bảng và/hoặc chỉ mục cho bảng này chiếm giữ, số lượng phần tử (số giá trị duy nhất) của chỉ mục, độ dài của bản ghi và chỉ mục, sự phân bổ của chúng, v.v. Trong quá trình đánh giá, trình tối ưu hóa không giả định rằng bất kỳ phần nào sẽ nằm trong bộ đệm; trình tối ưu hóa giả định rằng mỗi thao tác đọc là một lần truy cập đĩa.

Đôi khi trình tối ưu hóa trình phân tích không thể phân tích tất cả các kế hoạch thực hiện có thể có và chọn sai kế hoạch. Ví dụ: nếu chúng ta có INNER JOIN trên 3 bảng thì bộ phân tích có 3 tùy chọn khả thi! = 6 và nếu chúng ta hợp nhất 10 bảng thì đã có 10 tùy chọn khả thi! = 3628800... MySQL không thể phân tích nhiều tùy chọn như vậy, vì vậy nó sử dụng thuật toán tìm kiếm tham lam trong trường hợp này.

Nhưng bạn không nên áp dụng cách hack này cho tất cả các truy vấn, hy vọng tối ưu hóa các kết quả khớp và tiết kiệm thời gian lập kế hoạch thực hiện truy vấn bằng trình tối ưu hóa và thêm STRAIGH_JOIN vào tất cả các truy vấn có liên kết, bởi vì Việc thay đổi và hợp nhất dữ liệu hiện là tối ưu nhưng có thể không còn tối ưu theo thời gian và khi đó các truy vấn sẽ bắt đầu bị trễ rất nhiều.

Ngoài ra, như đã đề cập ở trên, kết quả của các phép nối được đặt trong các bảng tạm thời, do đó, thường thích hợp khi sử dụng “bảng dẫn xuất”, trong đó chúng tôi áp đặt tất cả các điều kiện chúng tôi cần cho vùng chọn, đồng thời cũng chỉ ra GIỚI HẠN và thứ tự sắp xếp. TRONG trong trường hợp này chúng tôi sẽ loại bỏ sự dư thừa dữ liệu trong bảng tạm thời và cũng sắp xếp ở giai đoạn đầu (dựa trên kết quả của một mẫu chứ không phải lần dán cuối cùng, điều này sẽ làm giảm kích thước của các bản ghi sẽ được sắp xếp).

Một ví dụ tiêu chuẩn về cách tiếp cận được mô tả ở trên. Lấy mẫu đơn giản cho mối quan hệ nhiều-nhiều: tin tức và thẻ cho chúng.

LỰA CHỌN
t.tid, t.description, n.nid, n.title, n.extract , n.modtime
TỪ
LỰA CHỌN
n.nid
TỪ
tin tức n
Ở ĐÂU
n.type = 1321
VÀ n.xuất bản = 1
VÀ trạng thái = 1
ĐẶT BỞI
n.modtime DESC
GIỚI HẠN
200
) dưới dạng tin tức
THAM GIA TRONG
tin tức n TRÊN n.nid = news.nid
THAM GIA TRONG
news_tag nt BẬT n.nid = nt.nid
THAM GIA TRONG
tags t ON nt.tid = t.tid

* Mã nguồn này đã được đánh dấu bằng Công cụ đánh dấu mã nguồn.

Và cuối cùng, một vấn đề nhỏ mà đôi khi tôi hay hỏi khi phỏng vấn :-)

Có một trang blog tin tức. Có những thực thể như tin tức và bình luận về chúng.

Nhiệm vụ là viết một truy vấn hiển thị danh sách 10 tin tức thuộc một loại nhất định (do người dùng chỉ định), các ấn phẩm được sắp xếp theo thời gian theo thứ tự thời gian và cũng hiển thị không quá 10 bình luận mới nhất cho mỗi tin tức này, tức là. nếu có nhiều bình luận hơn, chúng tôi chỉ hiển thị 10 bình luận cuối cùng.

Mọi thứ cần phải được thực hiện trong một yêu cầu. Vâng, đây có thể không phải là nhiều nhất Cách tốt nhất, và bạn có thể đề xuất một giải pháp khác :-)

Thẻ: Thêm thẻ

Biểu mẫu là một phần của hầu hết mọi ứng dụng web hiện nay. Chúng là phương pháp chính để nhận thông tin đầu vào từ những người sử dụng ứng dụng. Chúng có kích thước đa dạng, từ biểu mẫu chọn tham gia một trường nơi bạn chỉ nhập địa chỉ email của mình cho đến biểu mẫu rất dài với hàng chục hoặc thậm chí hàng trăm trường.

Để làm cho các biểu mẫu dài thân thiện hơn với người dùng, bạn nên mở rộng biểu mẫu trên nhiều trang. Điều này có thể giúp người dùng dễ theo dõi hơn và chúng tôi cũng có thể chia dữ liệu thành các phần riêng biệt, dựa trên phạm vi (ví dụ: tách thông tin khách hàng cá nhân khỏi dữ liệu thanh toán trong biểu mẫu thanh toán giỏ hàng).

Một trong những thách thức nảy sinh từ việc chia biểu mẫu trên nhiều trang là truyền dữ liệu từ trang này sang trang khác, vì ở điểm cuối cùng của biểu mẫu, chúng tôi có tất cả dữ liệu cần thiết sẵn sàng cho xử lý. Chúng ta sẽ xem xét hai phương pháp để thực hiện việc này: biến phiên và trường nhập ẩn.

Dù sao thì phiên họp là gì?

Phiên HTML là tập hợp các biến giữ trạng thái của nó khi người dùng điều hướng các trang của một trang web nhất định. Nó sẽ chỉ có sẵn cho tên miền đã tạo ra nó và sẽ bị xóa ngay sau khi người dùng rời khỏi trang web hoặc đóng trình duyệt của mình.

Vì vậy, phiên có tính chất bán cố định và nó có thể được sử dụng để chuyển các biến dọc theo các trang khác nhau mà khách truy cập sẽ đến trong khi truy cập trang web.

Biểu mẫu nhiều trang sử dụng phiên

Trong ví dụ của chúng tôi, chúng tôi sẽ tạo một biểu mẫu ba trang, giống như biểu mẫu đăng ký thành viên và thanh toán. Trang đầu tiên sẽ hỏi tên và địa chỉ của khách hàng, trang thứ hai là lựa chọn loại thành viên, trang thứ ba và trang cuối cùng là dữ liệu thanh toán phải được nhập. Bước cuối cùng là lưu dữ liệu trong MySQL.

Tệp đầu tiên chúng ta sẽ tạo (bước 1 của biểu mẫu) sẽ chỉ chứa một biểu mẫu đơn giản với hai trường.

Được rồi, không có gì nhiều hơn 2 trường nhập và nút gửi để đưa chúng ta đến bước 2. Trong trang tiếp theo, ngoài biểu mẫu HTMLđể thu thập dữ liệu thành viên, chúng ta sẽ cần mã để lưu trữ dữ liệu đã gửi từ bước 1 trong phiên.

Bây giờ chúng ta đã tạo bước 3 của biểu mẫu, phần còn lại là tập lệnh xử lý cuối cùng chèn dữ liệu vào cơ sở dữ liệu MySQL.

Và chúng ta đã hoàn thành. Xin lưu ý rằng trong truy vấn cuối cùng, chúng tôi đang sử dụng dữ liệu từ mảng $_SESSION và cả dữ liệu từ mảng $_POST, được đăng từ bước cuối cùng của biểu mẫu.

Cập nhật lần cuối: 1/11/2015

Một trong những cách chính mà trang web truyền dữ liệu là thông qua xử lý biểu mẫu. Các biểu mẫu đại diện cho các phần tử đánh dấu HTML đặc biệt có chứa các phần tử đầu vào khác nhau - Trường văn bản, nút, v.v. Và với sự trợ giúp của các biểu mẫu này, chúng ta có thể nhập một số dữ liệu và gửi nó đến máy chủ. Và máy chủ đã xử lý dữ liệu này.

Việc tạo biểu mẫu bao gồm các khía cạnh sau:

    Tạo một phần tử trong đánh dấu HTML

    Thêm một hoặc nhiều trường đầu vào vào phần tử này

    Đặt phương thức truyền dữ liệu: GET hoặc POST

    Đặt địa chỉ mà dữ liệu đã nhập sẽ được gửi đến

Vì vậy hãy tạo ra đồng phục mới. Để làm điều này, chúng ta sẽ xác định một tệp form.php mới, trong đó chúng ta sẽ đặt nội dung sau:

Đăng nhập vào trang web Đăng nhập:

Mật khẩu:

Thuộc tính action="login.php" của phần tử biểu mẫu cho biết dữ liệu biểu mẫu sẽ được tập lệnh xử lý đăng nhập.php, tệp này sẽ nằm cùng với tệp biểu mẫu.php trong một thư mục. Và thuộc tính Method="POST" chỉ ra rằng phương thức POST sẽ được sử dụng làm phương thức truyền dữ liệu.

Bây giờ hãy tạo một tập tin đăng nhập.php, sẽ có nội dung sau:

Để lấy dữ liệu biểu mẫu, biến toàn cục $_POST được sử dụng. Cô đại diện mảng kết hợp dữ liệu được truyền bằng phương thức POST. Sử dụng các phím chúng ta có thể nhận được các giá trị đã gửi. Các khóa trong mảng này là giá trị của thuộc tính tên của các trường nhập biểu mẫu.

Bởi vì thuộc tính tên trường nhập thông tin đăng nhập có giá trị login(), thì trong mảng $_POST, giá trị của trường này sẽ biểu thị khóa "đăng nhập": $_POST["login"]

Và vì có thể có những tình huống khi trường đầu vào sẽ không được đặt, chẳng hạn như khi truy cập trực tiếp vào tập lệnh: http://localhost:8080/login.php. Trong trường hợp này, nên kiểm tra tính khả dụng của dữ liệu bằng hàm isset() trước khi xử lý dữ liệu. Và nếu biến được đặt thì hàm isset() sẽ trả về true .

Bây giờ chúng ta có thể truy cập vào biểu mẫu:

Và chỉ cần bấm nút, dữ liệu đã nhập phương thức ĐĂNG sẽ được gửi đến kịch bản đăng nhập.php:

Không cần thiết phải gửi dữ liệu biểu mẫu đến một tập lệnh khác; bạn có thể xử lý dữ liệu biểu mẫu trong cùng một tệp biểu mẫu. Để làm điều này, hãy thay đổi tập tin biểu mẫu.php theo cách sau:

Đăng nhập vào trang web Đăng nhập:

Mật khẩu:

Bảo mật dữ liệu

Bảo mật dữ liệu có tầm quan trọng lớn trong PHP. Hãy xem xét một số cơ chế đơn giản có thể cải thiện tính bảo mật của trang web của chúng tôi.

Nhưng trước tiên, hãy lấy biểu mẫu từ chủ đề trước và thử nhập một số dữ liệu vào đó. Ví dụ: hãy nhập “cảnh báo (hi);” vào trường đăng nhập và “mật khẩu” vào trường mật khẩu:

Sau khi gửi dữ liệu tới đánh dấu html sẽ được thực hiện mã javascript, hiển thị một hộp thông báo.

Tránh vấn đề tương tựĐể an toàn, bạn nên sử dụng hàm htmlentities():

If(isset($_POST["login"]) && isset($_POST["password"]))( $login=htmlentities($_POST["login"]); $password = htmlentities($_POST["password" ]); echo "Thông tin đăng nhập của bạn: $login
Mật khẩu của bạn: $password"; )

Và thậm chí sau khi vào Mã HTML hoặc javascript tất cả các thẻ sẽ được thoát và chúng tôi sẽ nhận được kết quả đầu ra sau:

Một hàm khác - hàm Strip_tags() cho phép bạn loại trừ hoàn toàn các thẻ html:

If(isset($_POST["login"]) && isset($_POST["password"]))( $login=strip_tags($_POST["login"]); $password = Strip_tags($_POST["password" ]); echo "Thông tin đăng nhập của bạn: $login
Mật khẩu của bạn: $password"; )

Kết quả hoạt động của nó với cùng một đầu vào sẽ là đầu ra sau.

Trong một thời gian khá lâu, khi bắt đầu sự nghiệp nhà phát triển web, tôi đã làm việc với cơ sở dữ liệu này một cách tốt nhất có thể, nhưng tôi không biết nhiều. Anh ấy đã soạn các truy vấn nguyên thủy đơn giản và đôi khi còn chèn các truy vấn vào các vòng lặp. Thật không may, vào thời điểm đó, tôi đã không có được cuốn sách phù hợp về MySQL và phải học bằng cách thử và sai. Nhiều bài viết trên Internet bằng cách nào đó đã không truyền tải ngay cho tôi sự tuyệt vời truy vấn mySQL- THAM GIA.
Trong ấn phẩm này tôi sẽ kể cho bạn nghe về mọi người những lựa chọn khả thi làm việc với THAM GIA và hơn thế nữa, tôi sẽ trình bày nguyên lý hoạt động của từng lệnh - một cách trực quan.

Chúng tôi sẽ xem xét:
  • THAM GIA TRONG
  • CHỖ NỐI BÊN TRÁI
  • QUYỀN THAM GIA
  • THAM GIA NGOÀI
  • THAM GIA TRÁI LOẠI TRỪ INNER THAM GIA
  • QUYỀN THAM GIA LOẠI TRỪ INNER THAM GIA
  • THAM GIA NGOÀI LOẠI TRỪ THAM GIA INNER
  • Riêng biệt, cần lưu ý các điểm 5,6 và 7. Trên thực tế, các truy vấn này không kết nối hai bảng mà loại trừ các cột khỏi bảng này có trong bảng kia. Trên thực tế, điều này có thể rất hữu ích.

    THAM GIA nội bộ

    Một trong những yêu cầu phổ biến nhất, xảy ra cực kỳ thường xuyên. Truy vấn này sẽ trả về tất cả các bản ghi từ bảng bên trái (Bảng A) và các bản ghi từ (Bảng B), nhưng sẽ chỉ trả về các cột khớp.

    Yêu cầu ví dụ:

    Xem mã SQL

    LỰA CHỌN< select_list>TỪ Bảng_A A INNER THAM GIA Bảng_B B TRÊN A. Khóa = B. Khóa

    Chỗ nối bên trái

    Truy vấn này sẽ trả về tất cả các cột từ bảng bên trái (Bảng A), cũng như tất cả các cột từ bảng bên phải (Bảng B), nhưng chỉ những cột khớp với các cột từ bảng bên trái.

    Yêu cầu ví dụ:

    Xem mã SQL

    LỰA CHỌN< select_list>TỪ Bảng_A A THAM GIA TRÁI Bảng_B B TRÊN A. Khóa = B. Khóa

    Đúng THAM GIA

    Tương tự như truy vấn trước, nhưng sẽ trả về tất cả các cột từ bảng bên phải (Bảng B), cũng như tất cả các cột từ bảng bên trái (Bảng A) khớp với các cột từ bảng bên phải.

    Yêu cầu ví dụ:

    Xem mã SQL

    LỰA CHỌN< select_list>TỪ Bảng_A A QUYỀN THAM GIA Bảng_B B TRÊN A. Khóa = B. Khóa

    THAM GIA bên ngoài

    Thường yêu cầu nàyđược viết dưới dạng FULL OUTER JOIN hoặc FULL JOIN, tất cả các biến thể đều thực hiện một hành động, cụ thể là trả về tất cả các cột từ cả hai bảng, trong khi các cột phù hợp sẽ bị chồng lên bởi các cột từ bảng bên trái.

    Yêu cầu ví dụ:

    Xem mã SQL

    LỰA CHỌN< select_list>TỪ Bảng_A A THAM GIA ĐẦY ĐỦ Bảng_B B TRÊN A. Khóa = B. Khóa

    Còn lại Không bao gồm THAM GIA

    Truy vấn này sẽ trả về tất cả các cột từ bảng bên trái (Bảng A) không khớp với các cột từ bảng bên phải (Bảng B).

    Yêu cầu ví dụ:

    Xem mã SQL

    JavaScript bị chặn trong trình duyệt của bạn. Vui lòng kích hoạt JavaScript để trang web hoạt động!

    Làm việc với biểu mẫu

    Các biểu mẫu HTML được sử dụng để truyền dữ liệu từ người dùng trang Web đến máy chủ. PHP cung cấp một số công cụ đặc biệt để làm việc với biểu mẫu.

    Biến được xác định trước

    PHP có một số biến được xác định trước không thay đổi trên tất cả các ứng dụng đang chạy trong một môi trường cụ thể. Chúng còn được gọi là biến môi trường hoặc biến môi trường. Chúng phản ánh các cài đặt môi trường máy chủ Web Apache cũng như thông tin yêu cầu của trình duyệt này. Điều đó có thể làm được Giá trị URL, chuỗi truy vấn và các phần tử yêu cầu HTTP khác.

    Tất cả các biến được xác định trước đều được chứa trong mảng kết hợp $GLOBALS. Ngoài các biến môi trường, mảng này còn chứa các biến toàn cục được xác định trong chương trình.

    Ví dụ 1 Xem mảng $GLOBALS

    Kết quả là một danh sách tất cả các biến toàn cục, bao gồm cả biến môi trường, sẽ xuất hiện trên màn hình. Những cái được sử dụng phổ biến nhất là:

    Nội dung mô tả biến
    $_SERVER["HTTP_USER_AGENT"]Tên khách hàng và phiên bảnMozilla/5.0 (tương thích; Googlebot/2.1; +http://www.google.com/bot.html)
    $_SERVER["REMOTE_ADDR"]địa chỉ IP144.76.78.3
    getenv("HTTP_X_FORWARDED_FOR")Địa chỉ IP nội bộ của khách hàng
    $_SERVER["REQUEST_METHOD"]Phương thức yêu cầu (GET hoặc POST)LẤY
    $_SERVER["QUERY_STRING"]Tại NHẬN yêu cầu dữ liệu được mã hóa được gửi cùng với URL
    $_SERVER["REQUEST_URL"]Địa chỉ đầy đủ của khách hàng bao gồm chuỗi truy vấn
    $_SERVER["HTTP_REFERER"]URL của trang mà yêu cầu được thực hiện
    $_SERVER["PHP_SELF"]Đường dẫn đến chương trình đang được thực thi/index.php
    $_SERVER["SERVER_NAME"]Lãnh địatrang mạng
    $_SERVER["REQUEST_URI"]Con đường/php/php_form.php
    Xử lý đầu vào của người dùng

    Chương trình xử lý đầu vào PHP có thể được tách khỏi văn bản HTML chứa các biểu mẫu đầu vào hoặc có thể được đặt trên một trang.

    Ví dụ 2 Ví dụ xử lý đầu vào