我遇到mysql_real_escape_string的问题。我用ezSQL连接MySQL。
问题:
mysql_real_escape_string($ username)和mysql_real_escape_string($ password)变空。
代码:
$row = $db->get_row("SELECT firstname, secondname, id FROM users WHERE login='".mysql_real_escape_string($username)."' AND password='".mysql_real_escape_string($password)."'");
解决方法:
在$ row之前或之内放置mysql_real_escape_string会使值为空。把mysql_real_escape_string放在$ row之后就可以了。因此,在现有$行前面还有另一个$ db:
$row2 = $db->get_row("SELECT firstname, secondname, id FROM users");
$row = $db->get_row("SELECT firstname, secondname, id FROM users WHERE login='".mysql_real_escape_string($username)."' AND password='".mysql_real_escape_string($password)."'");
问题:
我该如何妥善解决这个问题?
答案 0 :(得分:0)
最好的方法是使用mysqli或pdo,因为mysql函数是deprecated,将来会被删除。
http://php.net/manual/en/mysqli.prepare.php包含一个很好的例子,您可以适应您的情况。首先按照与mysql一样的方式设置连接,然后准备查询,绑定将自动转义的参数然后你可以获取。
答案 1 :(得分:0)
ezsql有自己应该使用的转义方法 - Dagon
谢谢,这解决了我的问题!我已将代码更新为:
$password = $db->escape($_POST['password']);
$username = $db->escape($_POST['username']);
$row = $db->get_row("SELECT firstname, secondname, id FROM users WHERE login='".$username."' AND password='".$password."'");
我稍后会努力升级到MySQLi。我知道ezSQL也提供了一个MySQLi组件。感谢您的建议Destruction,meda和Christophe Ferreboeuf!