不能使用mysql_real_escape_string

时间:2010-10-12 03:45:25

标签: php mysql 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

网站的其余部分工作正常,连接到数据库和所有,但我在使用此功能时出错。

它在我的localhost测试服务器上完全正常。

有什么想法吗?

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

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);
}

事先感谢!

2 个答案:

答案 0 :(得分: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()无关紧要。

在适当的背景下使用每种类型的消毒方法。

答案 1 :(得分:0)

string mysql_real_escape_string(string $ unescaped_string [,resource $ link_identifier])

其中$ unescaped_string是您的字符串,$ link_identifier是您的数据库资源。

  

MySQL连接。如果链接   标识符未指定,最后一个   mysql_connect()打开的链接是   假定。如果没有找到这样的链接,它   将尝试创建一个好像   没有调用mysql_connect()   参数。如果没有找到连接   或建立,E_WARNING级别   生成错误。

PHP.NET mysql_real_escape_string resource