2013-02-26 148 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