2013-02-26 23 views
6

मैं जानना चाहता हूं कि पीडीओ में तारों से कैसे बचें। मैं कोड bellow में तरह स्प्रिंग्स भागने दिया गया है, लेकिन अब पीडीओ के साथ मैं कैसे करना है यहपीडीओ में तारों से कैसे बचें?

$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' का उपयोग क्यों कर रहे हैं? –

+0

वंचित mysql_ * फ़ंक्शंस का उपयोग न करें। इसके बजाय पीडीओ/MySQLi का उपयोग करें। – Boynux

+2

@ श्री एलियन - संभवतः सत्र में टेक्स्ट होता है और एसक्यूएल के पूर्व-भागने वाले टुकड़े नहीं होते हैं। आपको डेटा प्रारूप या स्ट्रिंग में डालने से पहले टेक्स्ट से हमेशा बचाना चाहिए जिसे कोड के रूप में मूल्यांकन किया जाएगा। – Quentin

उत्तर

20

ठीक है, आप PDO::quote उपयोग कर सकते हैं पता नहीं है, लेकिन, के रूप में अपने स्वयं के docpage में कहा ...

आप इस समारोह का उपयोग कर रहे हैं, तो SQL कथन का निर्माण करने के लिए, आप दृढ़ता से PDO::prepare() उपयोग करने के लिए SQL कथन तैयार करने के लिए सिफारिश की हैं बाध्य बजाय मापदंडों पीडीओ :: उद्धरण() का उपयोग कर के साथ एक एसक्यूएल बयान में उपयोगकर्ता इनपुट को जोड़ के लिए ।

आपके मामले में इसे इस तरह देख सकते हैं:

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

में स्थानांतरित कर चुका हूं, जो मैंने पूछा है, बहुत धन्यवाद – humphrey

2

mysql_* समारोह पीडीओ में काम नहीं करेगा। क्यूं कर? चूंकि पीडीओ डाटाबेस से कनेक्ट करने के लिए mysql का उपयोग नहीं करता है, जहां तक ​​इनपुट सैनिटाइजेशन है, पीडीओ तैयार कथन का उपयोग करता है, आप यहां के लिए एक अच्छा ट्यूटोरियल पा सकते हैं: pdo

+0

महान आदमी मुझे धन्यवाद – humphrey

संबंधित मुद्दे