2016-02-12 5 views
5

Ich versuche ein PHP-Skript mit MySQLi zu schreiben, um eine Datenbank abzufragen.Wie kann ich eine Datenbank in PHP abfragen und Ergebnisse basierend auf übereinstimmenden Benutzereingaben zurückgeben?

Ich würde es gerne, wenn die Benutzereingabe gegen die Datenbank überprüft werden könnte und dann ein Ergebnis aus der Spalte 'Konjugation' zurückgeben, wenn die Zeichenfolge in der Spalte 'root' der Tabelle 'normal_verbs' in der Eingabe ist .

Also, wenn die Benutzereingabe etwas wie "Foobar" ist und die Root-Spalte "foo" hat, würde ich gerne "foo" in "foobar" sehen und diesen Wert von "conjugation" zurückgeben Reihe.

Ich kann nicht scheinen, um die Abfrage zu erhalten, wie ich es will. Der, den ich unten verwende, ist im Grunde nur ein Platzhalter. Ich verstehe nicht ganz, warum es nicht funktioniert.

Was ich versuche, ist dies:

 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); 

Es ist nicht mir irgendwelche Fehler geben, so denke ich, es in die Datenbank ist zu verbinden.

EDIT2: Ich lag falsch. Mir fehlte etwas Offensichtliches aufgrund von Missverständnissen bei MySQLi und ich habe den Code entsprechend bearbeitet. Also funktioniert der obige Code, indem er sich mit der Datenbank verbindet und ein Ergebnis zurückgibt, aber ich stehe immer noch auf einer brauchbaren SQL-Anweisung, um das zu tun, was ich tun soll.

+2

Wenn diese typografische Anführungszeichen in es sind Sie Syntaxfehler bekommen, sind sie in den Protokollen. Fügen Sie die Fehlerberichterstattung an den Anfang Ihrer Datei (en) direkt nach dem Öffnen des '

+3

[Ihr Skript ist für SQL Injection Attacks gefährdet.] (http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in- php) Erfahren Sie mehr über [vorbereitet] (http://en.wikipedia.org/wiki/Prepared_statement) Anweisungen für [MySQLi] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) . –

+0

Sie führen die Abfrage, aber nicht die Daten abholen mit etwas wie 'fetch()' –

Antwort

4

Bitte versuchen Sie dies:

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

Es wählt alle Zeilen, in denen Wurzel überall $ y enthält.

Darüber hinaus ist Ihr Code anfällig für SQL-Injektionen. Bitte beachten Sie here für weitere Informationen.

+0

Danke. Wird dies alle Zeilen auswählen, in denen die 'root' -Tabelle einen Teilstring von $ y hat und nicht die Gesamtheit von $ y? – DCM

+0

Ja, es wählt alle Zeilen aus, in denen root in $ y enthalten ist. Wenn Sie nur ein Ergebnis wünschen, können Sie sie nach einem Parameter sortieren und auf eins beschränken. –

+0

Okay, also funktionierte das mehr oder weniger für mich, außer dass ich das "+ $ y +" zu (". $ Y.") Ändern musste. Mit "+ $ y +" wurde überhaupt nichts gemacht. Ich würde gerne wissen warum, aber ich bin einfach begeistert, dass es funktioniert hat. Vielen Dank! – DCM

0

Diese SQL-Abfrage versuchen dies wie

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

Das gibt mir einen seltsamen Fehler, der mir sagt, dass die Variable in meiner print_r-Anweisung jetzt undefiniert ist. Ich gebe es als $ m = db_query ("SELECT' Konjugation' von normalen_Verben wo 'root' wie '% $ y%'"); Habe ich irgendwo etwas Interpunktion verpasst? – DCM

+0

versuchen Sie dies http://stackoverflow.com/questions/29266134/weird-error-in-phpmyadmin-it-is-installed-successfull-but-still-not-working Problem soved –