mysql_real_escape_string在localhost中工作,但在webserver上不工作

时间:2011-10-18 06:58:50

标签: php mysql

我有一个PHP脚本,它在从用户填写的表单中获取数据后将记录插入数据库。我在我的本地机器(WAMP服务器)上开发并在我的PHP脚本中包含以下代码:

$name = mysql_real_escape_string($_POST['name']);
        $email = mysql_real_escape_string($_POST['email']);

        //connecting to db
        mysql_connect("host", "user", "pass") or die('save_failed');
        mysql_select_db("db") or die('save_failed');

        //inserting into table
        mysql_query("INSERT INTO table(name, email) VALUES('" . $name . "', '" . $email . "' ) ") 
        or die('save_failed');  

该脚本按预期工作,并且记录已成功插入表中。

一旦我将脚本移动到我的网络服务器,我意识到存储在数据库中的值是空字符串。删除mysql_real_escape_string已解决此问题。

为什么mysql_real_escape_string无法在我的网络服务器上运行?

我正在处理的数据库没有改变。即使在本地开发,我也在点击我的网络服务器数据库。 localhost上的PHP ver是5.3.8,而在webserver上是5.2。

PHP 5.2不支持mysql_real_escape_string,如果有,那么替代方案是什么?

3 个答案:

答案 0 :(得分:4)

mysql_connect("host", "user", "pass") or die('save_failed');放在mysql_real_escape_string之前。

答案 1 :(得分:2)

首先需要连接数据库,然后 mysql_real_escape你的字符串。我怀疑它在本地工作,因为PHP和您的数据库已配置,因此他们可以在需要时自动建立连接。

  

http://www.php.net/mysql_real_escape_string

     

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

显然,您还应该激活错误报告和/或检查错误日志。

答案 2 :(得分:0)

来自mysql_real_escape_string()的手册页:

  

<强>参数

     

unescaped_string :要转义的字符串。

     

link_identifier: MySQL连接。如果未指定链接标识符,则   假设mysql_connect()打开的最后一个链接。如果没有这样的链接   发现,它会尝试创建一个,就像调用mysql_connect()一样   没有争论。如果未找到或建立连接,则为E_WARNING   生成级别错误。

您的代码在致电mysql_real_escape_string()之前使用mysql_connect()。这意味着PHP正在尝试打开与MySQL服务器的连接,而不是您认为并且您没有提供凭据或进行错误检查。如果它在您的开发框中有效,则可能是纯粹的机会:您的本地服务器具有php.ini的默认凭据或无密码的MySQL帐户。

连接到db 部分移到顶部,然后就完成了。