当前位置:  开发笔记 > 编程语言 > 正文

不能使用mysql_real_escape_string

如何解决《不能使用mysql_real_escape_string》经验,为你挑选了1个好方法。

所以,我在使用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 
"; 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); }

先谢谢!



1> Bill Karwin..:

第一点:如果您收到错误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()无关紧要.

在适当的上下文中使用每种类型的清理方法.

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有