पीडीओ वैल्यू डेटा को बाइंड करते हैं, टेबल और कॉलम के नामों को नहीं।
आप बाइंडिंग के उपयोग को गलत समझ रहे हैं। आप तालिका और स्तंभ नामों को पीडीओ से बाइंड नहीं कर सकते हैं। आप उन स्तंभों में सम्मिलित करने के लिए डेटा बाँधते हैं। स्ट्रिंग ऑपरेशंस का उपयोग करके तालिका नाम और कॉलम शामिल करने के लिए आपको SQL का निर्माण करने की आवश्यकता है।
डेटा को प्रारूपित करें
मैंने आपके $column और $value का नाम बदलकर $column_array, $value_array कर दिया है ताकि यह स्पष्ट किया जा सके कि वे क्या हैं, और मान लिया कि प्रत्येक एक साधारण सरणी है:$column_array = array('column1', 'column2', ...) etc.
$placeholders = array_map(function($col) { return ":$col"; }, $column_array);
$bindvalues = array_combine($placeholders , $value_array);
$placeholders अब इस तरह दिखते हैं:
$placeholders = array(
':column1',
':column2',
...
);
$bindvalues अब इस तरह दिखता है:
$bindvalues = array(
':column1'=>'value1',
':column2'=>'value2',
...
);
बनाएं, तैयार करें, निष्पादित करें
$sql = $this->connect->prepare("INSERT INTO $table (" .implode(",", $column_array) .") VALUES (". implode(",", $placeholders) . ")";
यह आपको फॉर्म का तैयार विवरण देगा:
$sql = INSERT INTO table_name (column1, column2, ...) VALUES (:column1, :column2, ...)
फिर आप तैयार कथन को निष्पादित कर सकते हैं और $values को तर्क के रूप में पास कर सकते हैं।
$sql->execute($bindValues);
नोट:
- एक चेतावनी जिसका उल्लेख किया जाना चाहिए। सुनिश्चित करें कि आपका मूल डेटा SQL इंजेक्शन के विरुद्ध स्वच्छ कर दिया गया है। पीडीओ बाध्य मूल्यों के लिए इसका ख्याल रखता है, लेकिन यदि आप कॉलम का निर्माण कर रहे हैं, तो कहें, $_POST डेटा यह असुरक्षित है और इसे स्वच्छ करने की आवश्यकता है।