mysqli_real_escape_string()函數是PHP中的內置函數, 用於轉義所有特殊字符以用於SQL查詢。在將字符串插入數據庫之前使用它, 因為它刪除了可能干擾查詢操作的任何特殊字符。
當使用簡單的字符串時, 它們中可能包含特殊字符, 例如反斜槓和撇號(尤其是當它們直接從輸入了此類數據的表單中獲取數據時)。這些被認為是查詢字符串的一部分, 並且會干擾其正常運行。
<?php
$connection = mysqli_connect(
"localhost" , "root" , "" , "Persons" );
// Check connection
if (mysqli_connect_errno()) {
echo "Database connection failed." ;
}
$firstname = "Robert'O" ;
$lastname = "O'Connell" ;
$sql ="INSERT INTO Persons (FirstName, LastName)
VALUES ( '$firstname' , '$lastname' )";
if (mysqli_query( $connection , $sql )) {
// Print the number of rows inserted in
// the table, if insertion is successful
printf( "%d row inserted.n" , $mysqli ->affected_rows);
}
else {
// Query fails because the apostrophe in
// the string interferes with the query
printf( "An error occurred!" );
}
?>
在上面的代碼中, 查詢失敗, 因為使用mysqli_query()執行撇號時, 會將撇號視為查詢的一部分。解決方案是在查詢中使用字符串之前使用mysqli_real_escape_string()。
<?php
$connection = mysqli_connect(
"localhost" , "root" , "" , "Persons" );
// Check connection
if (mysqli_connect_errno()) {
echo "Database connection failed." ;
}
$firstname = "Robert'O" ;
$lastname = "O'Connell" ;
// Remove the special characters from the
// string using mysqli_real_escape_string
$lastname_escape = mysqli_real_escape_string(
$connection , $lastname );
$firstname_escape = mysqli_real_escape_string(
$connection , $firstname );
$sql ="INSERT INTO Persons (FirstName, LastName)
VALUES ( '$firstname' , '$lastname' )";
if (mysqli_query( $connection , $sql )) {
// Print the number of rows inserted in
// the table, if insertion is successful
printf( "%d row inserted.n" , $mysqli ->affected_rows);
}
?>
輸出如下:
1 row inserted.
更多數據庫相關內容請參考:lsbin - IT開發技術:https://www.lsbin.com/
查看以下更多數據庫相關的內容:
- PHP MySQL開發:https://www.lsbin.com/3083.html
- DBMS介紹:https://www.lsbin.com/2659.html
- 數據倉庫介紹:https://www.lsbin.com/2652.html