2016-10-31 8 views
0

Am versuchen, Daten von SQL zu erhalten, die ein bestimmtes Wort übereinstimmen, so schrieb ich diesen Code für sieEcho vollständige Palette von SQL

<?php 
     require ('config.php'); 
     $searchphrase = $_GET['seach']; 
     $searcharry = explode(" ", $searchphrase); 
     $searcharrycount = count($searcharry); 
     $i1 = 0; 
     $i2 = 0;  
     //sql 
     while ($i1 < $searcharrycount) { 
     $sql = "SELECT word, url FROM words WHERE word LIKE '%$searcharry[$i1]%'"; 
      $result = $conn->query($sql); 
      if ($result->num_rows > 0) { 
       while($row = $result->fetch_assoc()) { 
        $url = explode(" , ", $row["url"]); 
        $urlcount = count($url); 
        while ($i2<$urlcount) { 
         echo $url[$i2]."<br>"; 
         $i2++; 
        } 
       } 
      } 
      $i1++; 

     } 

     //end sql 
     $conn->close(); 

     ?> 

und das ist, wie mein SQL

ausgelegt ist

SQL data structure

So

, wenn ich diesen Code ausführen erwarte ich zu den Ergebnisse erhalten wie die fließenden
One
Zwei
Drei
Vier
Fünf
Sechs

Allerdings erhalte ich die fließenden Ergebnisse, wenn ich den Code ausführen:
One
Zwei
Fünf
Sechs

Also meine Frage ist, wie kann ich zeigen, die Ausgabe, die ich erwarte, anstatt zwei jeder Zeile in SQL anzuzeigen?

Antwort

0

Sie nie $i2 zurückgesetzt, so wie Sie mehr Reihen von Datenbank Ergebnissen, $i2 wächst weiter, und Sie schließlich mit Indizes starten Prozess, DON‘ T EXISTIEREN. Z.B. Lassen Sie uns sagen, dass jede Zeile Ihrer DB 3 URLs enthält.

row1: url1,url2,url3 
row2: url4,url5,url6 
row3: url7,url8,url9 
etc... 

Da Sie nie $i2 zurückgesetzt, Sie am Ende tun:

row1: url1,url2,url3 
    i2 0 1  2 

row2: url4,url5,url6 
    i2:     3 4 5 

row3: url7,url8,url9 
    i2:        6 7 8 

Entweder ein $i2=0 vor Ihrer while() Schleife setzen, so dass Sie immer mit dem Index 0, starten oder einfach, dass loszuwerden (sinnlos vollständig) while-Schleife:

echo str_replace(' , ', '<br>', $row['url']); 

da alles, was Sie tun, wirklich, das Komma eine Pause ändert, könnte genauso gut ändere ALLE gleichzeitig.

0

Set $i2 auf Null in jeder Iteration von while Schleife:

while($row = $result->fetch_assoc()) { 
    $url = explode(" , ", $row["url"]); 
    $urlcount = count($url); 
    $i2 = 0;   // reset $i2 here 
    while ($i2<$urlcount) { 
     echo $url[$i2]."<br>"; 
     $i2++; 
    } 
}