我有一个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
,如果有,那么替代方案是什么?
答案 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 部分移到顶部,然后就完成了。