| 特性 | addslashes() | mysql_real_escape_string() |
|---|---|---|
| 轉義字元 | 單引號、雙引號、反斜線、NUL | NUL、\n、\r、\、'、"、Control-Z(依連線字元集) | 字元集感知 | 否(僅按位元組) | 是(依當前連線字元集) |
| PHP 版本需求 | 所有版本 | PHP 4.3.0+ / PHP 5+ |
| 資料庫連線需求 | 不需要 | 需要有效連線資源 |
| 適用場景 | 通用字串轉義、非 MySQL 環境 | MySQL 專用、含多位元組字元(中文)環境 |
string mysql_real_escape_string ( string $unescaped_string [, resource $link_identifier ] )
mysql_query()。% 和 _(LIKE 查詢萬用字元)。<?php
$item = "Zak's and Derick's Laptop";
$escaped_item = mysql_real_escape_string($item);
printf("Escaped string: %s\n", $escaped_item);
// 輸出:Escaped string: Zak\'s and Derick\'s Laptop
?>
if (!get_magic_quotes_gpc()) {
$lastname = addslashes($_POST['lastname']);
} else {
$lastname = $_POST['lastname'];
}
// 建議:無論 magic_quotes_gpc 開關,統一檢查並處理
注意:PHP 5.4+ 已移除 magic_quotes_gpc,舊代碼需重構。
mysql_escape_string:不考慮連線字元集,已棄用。mysql_real_escape_string:考慮連線字元集,安全性更高。根據 MySQL 手冊,mysql_real_escape_string 實際轉義以下字元:
嚴格來說,MySQL 僅要求轉義反斜線與引號即可用於查詢字串,其餘為了日誌可讀性。
mysql_real_escape_string。addslashes 僅適用於單位元組字元集或非資料庫場景。magic_quotes_gpc,統一在代碼層處理轉義。