为什么mysql_real_escape_string返回布尔值?

时间:2013-11-10 11:00:58

标签: php sql-injection

我写了一个PHP脚本来处理用户登录。为了防止SQL注入攻击,我使用了'mysql_real_escape_string'函数。一切都很好,直到今天。我已经跟踪代码并找到了问题;使用'mysql_real_escape_string'的行。我已将其更改为以下基本命令:

$username=mysql_real_escape_string('sample');
var_dump($username)

输出结果为:

bool(false)

在我的本地Web服务器(WAMP)上一切正常,但在远程主机上出现问题!怎么了? (主机PHP是5.4.12)

2 个答案:

答案 0 :(得分:9)

根据http://php.net/manual/en/function.mysql-real-escape-string.php

  

返回转义字符串,错误时返回FALSE。

错误时返回false;

将以下行添加到文件头部:

error_reporting(E_ALL);

所以你可以查看错误。

在使用函数mysql_real_escape_string('sample')之前,您可能忘记建立mysql连接 这是根据http://us1.php.net/mysql-real-escape-string

中的第一个错误
  

在使用mysql_real_escape_string()之前需要MySQL连接   否则会生成E_WARNING级别的错误,FALSE为   返回。

您应该知道有更好的方法来阻止SQL注入,您可以在此处查看: How can I prevent SQL injection in PHP?

答案 1 :(得分:2)

  

返回转义字符串,如果出错则返回FALSE。

Documentation

我无法告诉你错误是什么,但几乎可以肯定:

  

注意:

     

在使用mysql_real_escape_string()之前需要MySQL连接,否则会生成级别E_WARNING的错误,并返回FALSE。如果未定义 link_identifier ,则使用最后一个MySQL连接。