Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

PDO फ़ंक्शन mysql_real_escape_string के समतुल्य क्या है?

अच्छा नहीं, कोई नहीं है!

तकनीकी रूप से PDO::quote() है लेकिन यह शायद ही कभी उपयोग किया जाता है और <के बराबर नहीं है। मजबूत>mysql_real_escape_string()

यह सही है! यदि आप पहले से ही पीडीओ का सही तरीके से उपयोग कर रहे हैं, जैसा कि तैयार विवरण का उपयोग करके प्रलेखित किया गया है। , तो यह आपको MySQL इंजेक्शन से बचाएगा।

# Example:

नीचे सुरक्षित . का एक उदाहरण दिया गया है तैयार बयानों (पीडीओ) का उपयोग कर डेटाबेस क्वेरी

  try {
     // first connect to database with the PDO object. 
     $db = new \PDO("mysql:host=localhost;dbname=xxx;charset=utf8", "xxx", "xxx", [
       PDO::ATTR_EMULATE_PREPARES => false, 
       PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
     ]); 
 } catch(\PDOException $e){
     // if connection fails, show PDO error. 
   echo "Error connecting to mysql: " . $e->getMessage();
 }

और, अब यह मानते हुए कि कनेक्शन स्थापित हो गया है, आप अपनी क्वेरी को इस तरह निष्पादित कर सकते हैं।

if($_POST && isset($_POST['color'])){ 

    // preparing a statement
    $stmt = $db->prepare("SELECT id, name, color FROM Cars WHERE color = ?");

    // execute/run the statement. 
    $stmt->execute(array($_POST['color']));

    // fetch the result. 
    $cars = $stmt->fetchAll(\PDO::FETCH_ASSOC); 
    var_dump($cars); 
 }

अब, जैसा कि आप शायद बता सकते हैं, मैंने $_POST["color"] के मूल्य से बचने/स्वच्छता के लिए कुछ भी उपयोग नहीं किया है . और यह कोड पीडीओ और तैयार बयानों की शक्ति के लिए myql-इंजेक्शन धन्यवाद से सुरक्षित है।

यह ध्यान देने योग्य है कि आपको charset=utf8 . पास करना चाहिए विशेषता के रूप में, आपके DSN . में जैसा कि ऊपर देखा गया है, सुरक्षा कारणों से, और हमेशा पीडीओ को अपवादों के रूप में त्रुटियों को दिखाने के लिए सक्षम करें।

PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION

इसलिए आपके डेटाबेस प्रश्नों की त्रुटियां आपकी निर्देशिका संरचना, डेटाबेस उपयोगकर्ता नाम आदि जैसे संवेदनशील डेटा को प्रकट नहीं करेंगी।

अंतिम लेकिन कम से कम, ऐसे क्षण हैं जब आपको पीडीओ 100% पर भरोसा नहीं करना चाहिए, और एसक्यूएल इंजेक्शन को रोकने के लिए कुछ अतिरिक्त उपाय करने के लिए बाध्य होंगे, उन मामलों में से एक है, यदि आप MySQL के पुराने संस्करणों का उपयोग कर रहे हैं [ mysql =< 5.3.6 ] जैसा कि में वर्णित है यह उत्तर

लेकिन, जैसा कि ऊपर दिखाया गया है, तैयार किए गए कथनों का उपयोग करना mysql_ से शुरू होने वाले किसी भी फ़ंक्शन का उपयोग करने की तुलना में हमेशा सुरक्षित रहेगा।

अच्छा पढ़ा

MySQL डेवलपर्स के लिए PDO ट्यूटोरियल



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JPA का उपयोग करके SSH के माध्यम से दूरस्थ MySQL सर्वर से कैसे कनेक्ट करें?

  2. SQL में दो पंक्तियों के बीच अंतर की गणना करें

  3. दो क्षेत्रों पर क्वेरी द्वारा Django अलग समूह

  4. MySQL में करंट कनेक्शन के लिए लोकेल कैसे सेट करें

  5. जावास्क्रिप्ट में उपयोग करने के लिए mysql डेटाबेस से डेटा प्राप्त करें