mysql_escape_string與addslashes的區別在於
mysql_escape_string總是將「'」轉換成「\'」
而addslashes
在magic_quotes_sybase=on時將「'」轉換成「''」
在magic_quotes_sybase=off時將「'」轉換成「\'」
addslashes() | mysql_escape_string() | |||
Ascii | Name | testing | testing | source |
0 | Null | |||
8 | Backspace | |||
9 | Tab | |||
10 | \n | |||
13 | \r | |||
26 | Substitute | |||
34 | " | |||
39 | ' | |||
92 | \ |
http://blog.preinheimer.com/index.php?/archives/247-addslashes-vs-mysql_escape_string.html
三個函數的功能都是給特殊字符轉義。addslashes():
PHP 指令 magic_quotes_gpc 為 on, 它主要是對所有的 GET、POST 和 COOKIE 數據自動運行 addslashes()。不要對已經被 magic_quotes_gpc 轉義過的字符串使用 addslashes(),因為這樣會導致雙層轉義。遇到這種情況時可以使用函數 get_magic_quotes_gpc() 進行檢測。 轉義字符有:',",\, NULL.
mysql_escape_string():
本函數和 mysql_real_escape_string() 完全一樣,除了 mysql_real_escape_string() 接受的是一個連接句柄並根據當前字符集轉移字符串之外。mysql_escape_string() 並不接受連接參數,也不管當前字符集設定。此函數不推薦使用,在php6.0將被移除。
mysql_real_escape_string():
本 函數將 string 中的特殊字符轉義,並考慮到連接的當前字符集,因此可 以安全用於mysql_query(),可使用本函數來預防數據庫攻擊。 轉義字符有:\x00, \n, \r, \, ', " and \x1a
注: 1. mysql_escape_string(),mysql_real_escape_string() 並不轉義 % 和 _。
2. mysql_real_escape_string 需要 MySQL 數據庫連接,因 此,在調用 mysql_real_escape_string 之前,必須連接上 MySQL 數據庫。
<?php
echo get_magic_quotes_gpc(); // 1
echo $_POST['lastname']; // O\'reilly
echo addslashes($_POST['lastname']); // O\\\'reilly
if (get_magic_quotes_gpc()) {
$lastname = stripslashes($_POST['lastname']);
}
else {
$lastname = $_POST['lastname'];
}
// If using MySQL
$lastname = mysql_real_escape_string($lastname);
echo $lastname; // O\'reilly
$sql = "INSERT INTO lastnames (lastname) VALUES ('$lastname')";
?>
沒有留言:
張貼留言