我有一个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'); 脚本就像预期的那样工作,记录被成功插入到表中。
当我将脚本移动到我的were服务器时,我意识到存储在数据库中的值是空字符串。删除mysql_real_escape_string修复了此问题。
为什么mysql_real_escape_string不能在我的Why服务器上工作?
我正在处理的数据库没有改变。即使是在本地开发时,我也会遇到was服务器DB。本地主机上的PHP版本是5.3.8,而ver服务器上的PHP版本是5.2。
PHP5.2不支持mysql_real_escape_string吗?如果支持,还有什么替代方案?
发布于 2011-10-18 15:02:04
将mysql_connect("host", "user", "pass") or die('save_failed');放在mysql_real_escape_string之前。
发布于 2011-10-18 15:03:03
你首先需要连接到数据库,然后mysql_real_escape你的字符串。我怀疑它可以在本地工作,因为PHP和您的数据库已配置好,以便它们可以在需要时自动建立连接。
如果未指定链接标识符,则假定是mysql_connect()打开的最后一个链接。如果找不到这样的链接,它将尝试创建一个链接,就好像调用mysql_connect()时没有参数一样。如果未找到或未建立连接,则会生成E_WARNING级错误。
显然,你也应该激活错误报告和/或检查你的错误日志。
发布于 2011-10-18 15:08:29
从mysql_real_escape_string()的手册页
参数
unescaped_string:要转义的字符串。
对MySQL连接执行link_identifier:操作。如果未指定链接标识符,则假定使用mysql_connect()打开的最后一个链接。如果找不到这样的链接,它将尝试创建一个链接,就好像调用mysql_connect()时没有参数一样。如果未找到或未建立连接,则会生成E_WARNING级错误。
您的代码在调用mysql_connect()之前使用了mysql_real_escape_string()。这意味着PHP比您想象的更早地尝试打开到MySQL服务器的连接,并且您没有提供凭据或执行错误检查。如果它能在您的开发箱中工作,那么它可能完全是偶然的:您的本地服务器具有php.ini的默认凭据或一个无密码的MySQL帐户。
将连接到数据库的部分移到顶部,就完成了。
https://stackoverflow.com/questions/7803522
复制相似问题