2010-10-12 51 views
1

所以,我用mysql_real_escape_string不能使用mysql_real_escape_string

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'username'@'localhost' (using password: NO) in /home/path/php/functions.php on line 11 

網站的其餘部分工作正常,連接到數據庫,所有當得到這個警告,但在使用此功能時,我得到一個錯誤。

它在我的本地主機測試服務器上工作得很好。

任何想法?

我使用上述功能,在我自己的自制字符串衛生功能:

function sani($string){  
    $string = strip_tags($string); 
    $string = htmlspecialchars($string); 
    $string = trim(rtrim(ltrim($string))); 
    $string = mysql_real_escape_string($string); 
    return $string; 
} 

而且我用這個功能我每次做查詢的時間...

function mm_mysqlquery($query) { 
if (MM_DEBUG == true) { echo "Query: $query <br>"; mm_log("Query: $query"); } //print query if MM_DEBUG 
$link = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die ("mysql_error: " . mysql_error()); 
$db_selected = mysql_select_db(DB_NAME); 
return mysql_query($query, $link); 
} 

由於事先上!

回答

8

第一點:如果您從mysql_real_escape_string()得到錯誤,這是因爲您在連接到數據庫之前調用該函數。

它看起來像在運行查詢之前連接到數據庫。因此,在你致電mm_mysqlquery()函數之前你所做的任何事情都不會有連接。

mysql_real_escape_string()函數需要到數據庫的實時連接,所以它可以對連接的字符集進行正確的轉義。因此,您需要在之前連接,然後再進行轉義。

無論如何,最好這樣做,因爲如果您在單個PHP請求的過程中進行多次查詢,則連接一次並對所有查詢使用相同的連接的開銷會小一些。

二,請不要採取建議使用addslashes() - 它不會做mysql_real_escape_string()同樣的事情。這兩者不可互換。你應該養成使用mysql_real_escape_string()的習慣。

三,您的sani()函數顯示出一種常見的誤解。

function sani($string){  
    $string = strip_tags($string); 
    $string = htmlspecialchars($string); 
    $string = trim(rtrim(ltrim($string))); 
    $string = mysql_real_escape_string($string); 
    return $string; 
} 

常見的誤解是,您需要所有這些函數在SQL語句中使字符串安全。你沒有。只有mysql_real_escape_string()是必要的。本示例中的所有其他函數都不會防止SQL注入。

如果您在HTML演示文稿中輸出字符串並希望降低XSS攻擊的風險,那麼這些函數很有用,但mysql_real_escape_string()無關緊要。

在適當的上下文中使用每種類型的消毒方法。

+0

+1這是所有關於上下文 – alex 2011-03-09 00:51:33

0

串mysql_real_escape_string(字符串$ unescaped_string [,資源$ link_identifier])

其中$ unescaped_string是您的字符串和$ link_identifier是你的數據庫資源。

MySQL連接。如果未指定鏈接 標識符,則假定由mysql_connect()打開的最後一個 鏈接爲 。如果沒有找到這樣的鏈接, 將嘗試創建一個,就好像 mysql_connect()被調用,沒有 參數。如果沒有發現連接 或已建立,則會生成E_WARNING級別 錯誤。

PHP.NET mysql_real_escape_string resource

相關問題