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

पीडीओ तैयार वक्तव्यों और बाध्यकारी पैरामीटरों को समझना

आप सही हैं कि पहला मामला असुरक्षित है। हालांकि, यह समझना महत्वपूर्ण है कि एक स्टेटमेंट तैयार करने का मूल्य केवल तभी होता है जब आप वेरिएबल डेटा का उपयोग कर रहे हों, और/या एक ही क्वेरी को बार-बार निष्पादित कर रहे हों। यदि आप सादा कथन बिना चर के क्रियान्वित कर रहे हैं , आप बस यह कर सकते हैं:

$sql = "SELECT * from myTable WHERE this_column IS NOT NULL";
$result = $conn->query($sql);

और अंत में एक PDOStatement काम करने के लिए आपत्ति, ठीक उसी तरह जैसे जब आप PDO::exec() . का उपयोग करते हैं ।

आपके दूसरे मामले के लिए, फिर से, आप काफी हद तक सही हैं। क्या हो रहा है डेटाबेस को दिया गया वेरिएबल बच निकला है और उद्धृत किया गया है (जब तक कि आप PDOStatement::bindParam() के तीसरे तर्क के साथ अन्यथा निर्दिष्ट नहीं करते हैं। , इसे एक स्ट्रिंग के रूप में भेजा जाता है जो अधिकांश मामलों के लिए ठीक है।) इसलिए, खराब डेटा भेजे जाने पर क्वेरी "विफल" नहीं होगी। यह ठीक वैसे ही व्यवहार करता है जैसे आपने एक वैध संख्या पारित की थी जो डेटाबेस में एक आईडी के रूप में मौजूद नहीं थी। बेशक, कुछ हैं किनारे के मामले जहाँ आप अभी भी सही ढंग से तैयार किए गए कथन के साथ भी असुरक्षित हैं।

इसके अलावा, जीवन को आसान बनाने के लिए, आप इस तरह तैयार बयानों का उपयोग कर सकते हैं, अंतर्निहित बाध्यकारी करने के लिए:

$sql = "SELECT * FROM myTable WHERE id = :id";
$stmt = $conn->prepare($sql);
$stmt->execute([":id"=>$id]);

या इस तरह भी, बिना नाम वाले पैरामीटर के साथ:

$sql = "SELECT * FROM myTable WHERE id = ?";
$stmt = $conn->prepare($sql);
$stmt->execute([$id]);

स्वाभाविक रूप से, इसमें से अधिकांश को टिप्पणियों में समझाया गया है जब मैं उत्तर लिख रहा था!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. लॉगिन के लिए प्राप्त करें या पोस्ट करें?

  2. क्या t1, b2 को छोड़कर ड्रॉप टेबल जैसी किसी चीज़ को लागू करने के लिए कोई MySQL कमांड है?

  3. MySQL इंजेक्शन - अद्यतन/हटाने के लिए चयन क्वेरी का उपयोग करें

  4. तैयार स्टेटमेंट सिंटैक्स त्रुटि

  5. होमब्रे, MySQL 8 सपोर्ट