आप कॉलम और टेबल के नाम, केवल डेटा को बाइंड नहीं कर सकते। आपको तालिका निर्दिष्ट करने और फिर अपने '%calendar weekday%'
. के लिए बाध्य करने की आवश्यकता है ।
$stmt = $conn->prepare("SELECT " . $selectLang . " FROM `TranslationsMain` WHERE `location` LIKE ? ORDER BY `sortOrder`, " . $selectedLang);
$stmt->bind_param('s', $calendar_weekday);
यदि आप गतिशील तालिका/स्तंभ नामों का उपयोग करना चाहते हैं तो आपको उन वस्तुओं की न्यूनतम श्वेत-सूची का प्रदर्शन करना चाहिए। आप डेटाबेस से पूछकर एक गतिशील सफेद सूची बना सकते हैं कि किसी दिए गए डेटाबेस तालिका के लिए कौन से कॉलम मान्य हैं। उदाहरण के लिए:
SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA` = `database_name`
AND `TABLE_NAME` = `table_name`
आप इस सारी जानकारी को सरणियों में रख सकते हैं और फिर यह सुनिश्चित करने के लिए जाँच कर सकते हैं कि क्वेरी में उपयोग किए गए तालिका/स्तंभ नाम सरणियों में हैं। तालिका और कॉलम नामों के लिए अतिरिक्त विचार किया जाना चाहिए, यह सुनिश्चित करते हुए कि इन नामों के लिए कोई कुंजी / आरक्षित शब्दों का उपयोग नहीं किया गया है।
अंत में, डायनेमिक प्रश्नों के लिए मानों को कॉल करते समय मान्य तालिका/स्तंभ नामों के आसपास बैकटिक्स का उपयोग करें। यह कुंजी / आरक्षित शब्द सूची में किसी भी संभावित परिवर्तन को कवर करेगा और सुरक्षा की एक अतिरिक्त परत प्रदान करेगा।