2010-10-12 32 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

相关问题