श्वेत सूची
अपने वर्तमान स्वरूप में आपका कोड बहुत खतरनाक है, न केवल आप उपयोगकर्ता को यह तय करने की अनुमति देते हैं कि किन क्षेत्रों का चयन किया जाना चाहिए, बल्कि आप उसे यह भी तय करने की अनुमति देते हैं कि किन तालिकाओं पर पूछताछ करनी है। आपको इन पर श्वेत सूची की जाँच अवश्य करनी चाहिए। उदाहरण:
if($_POST['tableSelected'] == 'acceptable_table1' || $_POST['tableSelected'] == 'acceptable_table2) {
$table = $_POST['tableSelected']
}
इसी तरह आपको फील्ड सूचियों को मान्य करना चाहिए। लेकिन क्षेत्र सूची सत्यापन जटिल होने जा रहा है क्योंकि आपके क्षेत्र तालिका पर निर्भर होने जा रहे हैं। मेरा सुझाव है कि सरणियाँ बनाएँ और जाँचें कि चयन इसमें है।
$table1_fields = array('col1','col2',...)
$table2_fields = array('col1','col2',...)
तैयार विवरण
जैसा कि आप जानते हैं कि तैयार किए गए बयानों का उपयोग केवल मापदंडों को बांधने के लिए किया जा सकता है। उनका उपयोग टेबल नाम और कॉलम नाम भरने के लिए नहीं किया जा सकता है। इसलिए आपको तैयार बयान और श्वेत सूची दोनों की आवश्यकता है। मैं PDO का उपयोग करने का सुझाव देता हूं . यह कुछ ऐसा दिखाई दे सकता है
$stmt = $dbh->prepare("SELECT {$fieldlist} FROM {$table} where field = ?");
$stmt->execute(array('somevalue'));