2016-02-12 7 views
5

मैं डेटाबेस से पूछताछ के लिए MySQLi के साथ एक PHP स्क्रिप्ट लिखने की कोशिश कर रहा हूं।मैं पीएचपी में डेटाबेस से कैसे पूछता हूं और मेल खाने वाले उपयोगकर्ता इनपुट के आधार पर परिणाम कैसे लौटा सकता हूं?

मुझे यह अच्छा लगेगा कि उपयोगकर्ता के इनपुट को डेटाबेस के विरुद्ध चेक किया जा सकता है और फिर कॉलम 'conjugation' से परिणाम वापस कर सकते हैं यदि तालिका 'सामान्य'verbs' के कॉलम 'रूट' में स्ट्रिंग इनपुट में है ।

तो यदि उपयोगकर्ता इनपुट "foobar" जैसा कुछ है, और रूट-कॉलम में "foo" है, तो मैं इसे 'foobar' में 'foo' देखना चाहता हूं और उसमें 'conjugation' का मान वापस करूँगा पंक्ति।

मुझे ऐसा काम करने के लिए क्वेरी नहीं मिल रही है जैसा मैं चाहता हूं। जिसकी मैं नीचे उपयोग कर रहा हूं वह मूल रूप से केवल प्लेसहोल्डर है। मैं पूरी तरह समझ नहीं पा रहा हूं कि यह क्यों काम नहीं करता है।

 function db_connect() { 

      static $connection; 

      if(!isset($connection)) { 
       $connection = mysqli_connect('localhost','user','password','Verb_Bank'); 
      } 

      if($connection === false) { 
       return mysqli_connect_error(); 
      } 
      return $connection; 
     } 

     function db_query($query) { 
      $connection = db_connect(); 
      $result = mysqli_query($connection,$query); 

      return $result; 
     } 

     function db_quote($value) { 
       $connection = db_connect(); 
       return "'" . mysqli_real_escape_string($connection,$value) . "'"; 
      }  
$m= db_query("SELECT `conjugation` from normal_verbs where `root` in (" . $y . ")"); 
    if($m === false) { 
     // Handle failure - log the error, notify administrator, etc. 
    } else { 
     // Fetch all the rows in an array 
     $rows = array(); 
     while ($row = mysqli_fetch_assoc($m)) { 
      $rows[] = $row; 
     } 
    } 
    print_r ($rows); 

यह मुझे किसी भी त्रुटि दे रही है नहीं कर रहा है, इसलिए मुझे लगता है कि डेटाबेस से कनेक्ट कर रहा है:

मैं क्या कोशिश कर रहा हूँ, यह है।

EDIT2: मैं गलत था। मैं MySQLi को गलतफहमी के कारण कुछ स्पष्ट याद कर रहा था और तदनुसार कोड संपादित कर चुका हूं। तो उपरोक्त कोड काम करता है कि यह डेटाबेस से जुड़ता है और परिणाम देता है, लेकिन मैं अभी भी एक व्यवहार्य SQL कथन पर स्टंप कर रहा हूं जो मैं करना चाहता हूं।

+2

की तरह, वे लॉग में कर रहे हैं। अपने उद्घाटन '

+3

[आपकी स्क्रिप्ट एसक्यूएल इंजेक्शन अटैक के लिए जोखिम में है।] (http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in- php) [तैयार] (http://en.wikipedia.org/wiki/Prepared_statement) के बारे में जानें [MySQLi] के लिए कथन (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) । –

+0

आप क्वेरी चला रहे हैं, लेकिन 'fetch() ' –

उत्तर

4

इस प्रयास करें:

SELECT 'conjugation' FROM 'normal_verbs' WHERE " . $y . " LIKE CONCAT('%',root,'%') 

यह सभी पंक्तियों जहां जड़ कहीं भी $ y शामिल चयन करता है।

इसके अतिरिक्त, आपका कोड एसक्यूएल इंजेक्शन के लिए कमजोर है। अधिक जानकारी के लिए कृपया here देखें।

+0

धन्यवाद। क्या यह उन सभी पंक्तियों का चयन करेगा जहां 'रूट' तालिका में $ y की पूरी तरह से $ y का सबस्ट्रिंग है? – DCM

+0

हां, यह उन सभी पंक्तियों का चयन करता है जहां रूट $ y में निहित है। यदि आप केवल एक परिणाम चाहते हैं, तो आप उन्हें कुछ पैरामीटर से सॉर्ट कर सकते हैं और उन्हें एक तक सीमित कर सकते हैं। –

+0

ठीक है, तो यह मेरे लिए कम या ज्यादा काम करता है, सिवाय इसके कि मुझे "+ $ y +" ("$ y।") में बदलना पड़ा। "+ $ Y +" का उपयोग करना कुछ भी नहीं कर रहा था। मैं जानना चाहता हूं क्यों, लेकिन मैं बस रोमांचित हूं कि यह काम करता है। धन्यवाद! – DCM

0

उन घुंघराले उद्धरण वहाँ आप सिंटैक्स त्रुटि हो रही है में हैं, तो इस एसक्यूएल क्वेरी का प्रयास करें इस

SELECT `conjugation` from normal_verbs where `root` like '%$y%' 
+0

यह मुझे एक अजीब त्रुटि दे रहा है जो मुझे बता रहा है कि मेरे print_r कथन में चर अब अपरिभाषित है। मैंने इसे $ m = db_query ("SELECT 'conjugation' को सामान्य_वर्क्स से रखा जहां' root''% $ y% ''); क्या मुझे कुछ विराम चिह्न कहीं या कुछ याद आया है? – DCM

+0

इसे आजमाएं http://stackoverflow.com/questions/29266134/weird-error-in-phpmyadmin-it-is-installed-sccessfully-but-still-not-working समस्या हल –

संबंधित मुद्दे

 संबंधित मुद्दे