2013-02-26 8 views
6

Chciałbym wiedzieć, jak uciec ciągi w PDO. I zostały ucieczce sprężyny jak na poniższym kodzie, ale teraz z PDO nie wiem jak to zrobićJak uciec struny w 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

Dlaczego używasz 'mysql_real_escape_string' dla wartości sesji? –

+0

Nie używaj zafascynowanych funkcji mysql_ *. zamiast tego użyj PDO/MySQLi. – Boynux

+2

@ Mr.Alien - Prawdopodobnie dlatego, że sesja zawiera tekst i nie wcześniej uciekł fragmenty SQL. Zawsze powinieneś uciec od tekstu przed wstawieniem go do formatu danych lub łańcucha, który zostanie oceniony jako kod. – Quentin

Odpowiedz

20

Cóż, można użyć PDO::quote, ale, jak powiedział w swoim własnym docpage ...

Jeśli używasz tej funkcji, aby zbudować SQL, jesteś zaleca się stosowanie PDO::prepare() przygotować SQL z parametrami związanymi zamiast korzystania z PDO :: cytat(), aby interpolować wprowadzanych przez użytkownika w instrukcji SQL .

W twoim przypadku może to wyglądać tak:

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

wielki u pod warunkiem co prosiłem dziękuję – humphrey

2

mysql_* funkcja nie będzie działać w PDO. CZEMU? Ponieważ PDO nie używa mysql do łączenia się z bazami danych, w zakresie odkażania danych wejściowych, PDO używa przygotowanych instrukcji, możesz znaleźć tutaj dobry tutorial: pdo

+0

wielkiego człowieka zrozumiałem dzięki – humphrey