2008年10月31日 星期五

addslashes() vs mysql_escape_string()

addslashes() vs mysql_escape_string() 兩種函數對一些特別符號的區隔

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、POSTCOOKIE 數據自動運行 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')";
?>


【下列文章您可能也有興趣】

沒有留言: