??? ??? ?? ?? SQL ??? ???? ?? ?? ?? ??????? SQL ??? ??????.
?????? ???? value') 的內(nèi)容; DROP TABLE table;--
? ?? ?? ??? ? ?? ??? ??? ?? ?????.
?? ?? ???? ??? ??? ?? ??? ?? ? ????
?????? ??? ????? Mysqli ?? PDO? ???? ???. mysqli? ???? ??? ?? ????? ??? ?????.
?????? ? ?? ??? mysqli::prepare
???.
?? ?? ???? ??? ??? PDO.
? ?? ?? ??? ?? ????.??? ???? ??? ?? ????, ??? ???? ? ??? ??? ??? ? ????. ??:
mysql_real_escape_string
mysql_real_escape_string?? ?? ?????? ???? ?? ????. ? ?? "???" ?? ????? ??? ??? ??????? ?? ???? ?? ? ?? ????. ?? ??????? ???? ???? SQL ?? ??? ??? ??? ??? SQL?? ???? ???? ???? ??? ????? >SQL ??? ???? ???? ??? ?? ????. ??? ??? ??? ??? ???? SQL ?? ??? ? ??? ?? ??? ??? ????? ?? ??? ?? ?????? ??? ???? ???. ? ????? ??? ?????? ??? ???? ?? ???? SQL ????. ??? ?? ???? ?? SQL? ???? ?? ??????.
?? ????? ????? ? ?? ??? ????.
PDO ??(???? ?? ?????? ????? ??):
?????? MySQLi(MySQL?):
PHP 8.2+?? execute_query()? ???? ??? ???? ????? ????, ?????, SQL ?? ??? ? ????.
PHP8.1??:
????MySQL ??? ??????? ???? ?? ? ?? ????? ??(?: PostgreSQL? ?? pg_prepare()
pg_prepare() ? pg_execute()
MySQL ??????? ????? ?? PDO? ??? ? ?? ??? ???? ????? ???? ????. ? ??? ????? ??? ?? ?????? ?????? ???. PDO
? ???? ??? ??? ?? ??? ????.
????
?? ??? ?? ??? ? ??? ?? ???? ???? ?? ???? PDOException
. ?? ??? PDO?
? ???? ?? MySQL ??? ?????.
??? setAttribute()
forcing ? PDO?? ?????? ??? ?? ?????? ??
setAttribute()字符集
????. ??? ?? ???? ?? MySQL ??? ???? ?? PHP? ?? ?? ???? ????(???? ???? SQL? ??? ??? ????).
???? ????
? ???? ????? ?? ???? ?? ?????.
??Mysqli?? ??mysqli? ?? ??? ??? ??? ???. ?????? prepare
的SQL語(yǔ)句由數(shù)據(jù)庫(kù)服務(wù)器解析和編譯。通過(guò)指定參數(shù)(?
或命名參數(shù),如上例中的 :name
),您可以告訴數(shù)據(jù)庫(kù)引擎您要過(guò)濾的位置。然后,當(dāng)您調(diào)用 execute
? ???? ??? ?? ??? ???? ?? ?????.
??? ??? ?? ???? ?? SQL ???? ?? ???? ??? ????? ????. SQL ??? ??????? ??? SQL? ??? ? ????? ?? ?? ???? ???? ???? ?????. ??? ?? SQL? ????? ??? ?????? ??? ?? ??? ??? ??? ??? ? ????.
Prepared ?? ??? ? ??? ?? ????? ???? ?????(?????? ??? ?? ???? ??? ? ???? ????? ?? ??? ??? ? ??). ?? ??? $name
變量包含 'Sarah'; DELETE FROMEmployees
結(jié)果只是搜索字符串 "'Sarah'; DELETE FROMEmployees"
?? ? ????? ??? ????.
Prepared ?? ???? ? ?? ??? ??? ???? ??? ?? ?? ? ???? ?? ? ?? ?? ???? ?????? ??? ????? ????.
?, ?? ??? ?????? ?? ?? ?????(PDO ??).
?????? ????? ??? ??? ?? ?? ??? ? ??? ?? ?? ??? ??? ?????? ? ??? ?? ?? ??? ?????? ? ????.
??? ?? ????? ?? ?? ?? ??? ?????? ??? ???? ??? ?? ???? ????.
????