PHP的转义问题
PHP的转义问题
悬赏分:20 - 提问时间2008-9-2 21:12
/ 判断用户名是否存在
$q = mysql_query('select id from gb_users where username=\''.$_POST['username'].'\'');
$rs = mysql_fetch_array($q);
if ($rs['id']) {
echo '用户名被占用!<br>';
这个username=\''.$_POST['username'].'\''); 为啥要转义? $q = mysql_query('select id from gb_users where username='.$_POST['username']); 这样不行么?
到底啥时候用转义?
![](http://img.baidu.com/img/iknow/icn_point.gif)
$q = mysql_query('select id from gb_users where username=\''.$_POST['username'].'\'');
$rs = mysql_fetch_array($q);
if ($rs['id']) {
echo '用户名被占用!<br>';
这个username=\''.$_POST['username'].'\''); 为啥要转义? $q = mysql_query('select id from gb_users where username='.$_POST['username']); 这样不行么?
到底啥时候用转义?
当要将一个有特殊用途的符号作为一个普通字符使用,或者要使用一个普通字符的特殊用法时,就要用转义。
比如 " 是用来限定字符串的,当一个字符串中有一个"时,就要用 \ 转义,就像 "abc"d" 这样,c 后面的 " ,我们想要让它作为一个普通字符双引号,这种表示是错误的,只有 abc 才被当作字符串处理,而后面的 d" 这部分无法处理,出现语法错误,正确的表示方法是 "abc\"d" 。同理,\r 不再是字母 r ,而是回车,\n 也不再是字母 n ,而是换行。
你的代码中,因为 sql 语句应该是
select id from gb_users where username='name'
这里应该有引号,而引号和双引号都是限定字符串的特殊符号,只有用 \ 转义,才能将其作为一个和=一样的普通符号包含在 sql 语句中。