2013-02-26 152 views
6

我想知道如何在pdo中转义字符串。 我一直在逃避弹簧一样在代码波纹管,但现在有PDO我不知道该怎么办呢如何在pdo中转义字符串?

$username=(isset($_POST['username']))? trim($_POST['username']): ''; 
$previlage =(isset($_GET['previlage'])); 
$query ="SELECT * FROM site_user 
WHERE username = '".mysql_real_escape_string($_SESSION['username'])."' AND previlage ='Admin'"; 
$security = mysql_query($query)or die (mysql_error($con)); 
$count = mysql_num_rows($security); 
+0

你为什么要使用会话值'mysql_real_escape_string'? – 2013-02-26 14:35:54

+0

请勿使用depricated mysql_ *函数。改用PDO/MySQLi。 – Boynux 2013-02-26 14:37:57

+2

@ Mr.Alien - 大概是因为会话包含文本而没有预先转义的SQL片段。在将数据插入数据格式或将被评估为代码的字符串之前,您应该始终转义文本。 – Quentin 2013-02-26 14:38:23

回答

20

好了,你可以使用PDO::quote,但是,在自己的docpage说...

如果您正在使用此功能来构建SQL语句,你是 强烈建议使用PDO::prepare()编写SQL语句 与绑定参数,而不是使用PDO ::引用()插值 用户输入的SQL语句。

在你的情况下,它可以是这样的:

$query = "SELECT * 
      FROM site_user 
      WHERE username = :username AND previlage = 'Admin'"; 
$sth = $dbh->prepare($query); 
$sth->execute(array(':username' => $_SESSION['username'])); 
+0

伟大的你提供了我所问的感谢很多 – humphrey 2013-02-26 14:48:54

2

mysql_*功能将无法在PDO工作。为什么?因为PDO犯规使用MySQL来连接到一个数据库,只要输入清理,PDO使用准备好的语句,你可以找到一个很好的教程在这里:pdo

+0

伟大的人我明白谢谢 – humphrey 2013-02-26 14:56:03