我有这段代码:
$query = "select id from votes where username = '$user' and article_id = $this->id";
我尝试使用此代码来清理它:
$query = sprintf("select id from votes where username = '$user' and article_id = $this->id",
mysql_real_escape_string($user),
mysql_real_escape_string($password));
但我收到了mysql_real_escape行的错误:
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'mexautos'@'localhost' (using password: NO) in /home/mexautos/public_html/kiubbo/data/article.php on line 145 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /home/mexautos/public_html/kiubbo/data/article.php on line 145 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'mexautos'@'localhost' (using password: NO) in /home/mexautos/public_html/kiubbo/data/article.php on line 146 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /home/mexautos/public_html/kiubbo/data/article.php on line 146
我在这里得到了用户名,我不知道它是否足够安全:
function getUsername(){ return $this->username; }
THX
答案 0 :(得分:8)
在使用mysql_real_escape_string之前,您需要一个mysql连接。
答案 1 :(得分:7)
我建议使用prepared statements代替sprintf
答案 2 :(得分:3)
不确定这是否是导致您出现问题的原因,但我相信您的sprintf语句中的变量不应该是'$ user'和'$ this-> id',但它们应该是'%s'
答案 3 :(得分:3)
警告:mysql_real_escape_string() [function.mysql实时逃逸字符串]: 用户拒绝访问 'mexautos'@'localhost'(使用 密码:否)
警告:mysql_real_escape_string() [function.mysql-real-escape-string]:A 链接到服务器不能 建立
您检查了链接吗?它活跃吗?您需要先连接才能使用mysql_real_escape_string() 你不忘记设置密码吗?
尝试:
mysql -u mexautos -p
(如果没有密码则输入Enter)
另外,请查看您的sprintf()功能,您需要使用%s来绑定您的变量
$a = 'Foo';
$b = 'Bar';
$foo = sprintf('Foo Bar %s %s', $a, $b);
答案 4 :(得分:2)
您需要连接才能使用mysql_real_escape_string(),因为它使用服务器的编码类型来帮助缩小。
sprintf()也应该看起来像这样
$query = sprintf("SELECT id FROM votes WHERE username = '%s' and article_id = %d",
mysql_real_escape_string($user),
mysql_real_escape_string($password));
答案 5 :(得分:1)
我建议使用像Zend_Db这样的成熟数据库抽象层(其中有很多)。实施自己的自制软件解决方案并不是我为生产系统推荐的。
答案 6 :(得分:0)
就像其他人说的那样,不是'$ user'而是'%s',你需要一个开放的连接。
@Tomalak sprintf更快 - 这就是使用它的原因 - 它是一个原生的C函数。