गतिशील तैयार क्वेरी
आप $_POST सरणी से गतिशील रूप से अपनी क्वेरी बना सकते हैं:
लेकिन, कभी भी उपयोगकर्ता इनपुट पर भरोसा न करें, जिसका अर्थ है कि आप उस डेटा पर भरोसा नहीं कर सकते हैं जिसमें $_POST में मान्य कॉलम नाम होंगे।
<मजबूत>1. पोस्ट डेटा को स्वच्छ करें
आप श्वेतसूची वाले कॉलम नामों की एक सरणी परिभाषित कर सकते हैं $whitelist = array('field1', 'field2', ...)
, और फिर उपयोग करें:
$data = array_intersect_key($_POST, array_flip($whitelist));
श्वेतसूची वाले कॉलम और आपके $_POST सरणी के बीच प्रतिच्छेदन खोजने के लिए। (धन्यवाद @BillKarwin)
<मजबूत>2. क्वेरी बनाएं
private function buildInsertSql($data, $table) {
$columns = "";
$holders = "";
foreach ($data as $column => $value) {
$columns .= ($columns == "") ? "" : ", ";
$columns .= $column;
$holders .= ($holders == "") ? "" : ", ";
$holders .= ":$column";
}
$sql = "INSERT INTO $table ($columns) VALUES ($holders)";
return $sql;
}
यह आपको प्रपत्र का SQL विवरण देगा:
$sql = INSERT INTO directory (field1, field2) VALUES (:field1, :field2)
और कथन तैयार करें:
$stmt = $dbh->prepare($sql);
<मजबूत>3. बाइंड पैरामीटर
फिर आप प्लेसहोल्डर्स के लिए पैरामीटर को गतिशील रूप से बाँध सकते हैं:
foreach ($data as $placeholder => $value) {
$stmt->bindValue(":$placeholder", $value);
}
और इसे निष्पादित करें:
$stmt->execute();
थोड़ा और उन्नत...
- इस लिंक पर एक नज़र डालें एक ही प्लेसहोल्डर से आबद्ध हो रहा है अपने गतिशील तैयार किए गए कथन को और अधिक मजबूत बनाने के तरीके के बारे में जानकारी के लिए।
- इस लिंक पर एक नज़र डालें:इनसाइड-लूप">बाइंड पैराम्स इनसाइड लूप एक लूप में मान बनाम बाध्यकारी पैरामीटर के संबंध में एक चेतावनी के लिए।