2016-06-20 12 views
-1

Ich habe ein Problem, und ich habe gesucht und gefunden viele Lösung auf Stack-Überlauf-Site, aber wenn ich es mit meinem Code versuchen es scheint nicht zu funktionieren. Ich hatte gehofft, dass jemand helfen könnte, herauszufinden, was mit meinem Code nicht stimmt.Wo und Bestellung von ID funktioniert nicht

Teil der Lösung auf Stack-Überlauf

mysql query with where and order by take long time

Ich versuche, einen Datensatz aus der Datenbank auswählen, in den Status = $ Status, aber die Antwort ist immer wie folgt:

Warnung: Ungültiges Argument für foreach() in /Users/khloudamer/Documents/Websites/BusinessDoorFinal2/index.php in Zeile 98

Das Verfahren ist wie folgt:

public static function readAlllisted($status){ 
       try{ 

        // = pending ORDER BY id DESC' 
        $db = Database::getInstance(); 
        $dbh = $db->getConnection(); 
        $results = $dbh->query('SELECT * FROM application where status = {$status} order by id desc limit 0,30');//select * from data where cat_id=12 order by id desc limit 0,30 
        return $results; 
       }catch(Exception $e){ 
        return $e->getMessage(); 
       } 

I

(SELECT * FROM application where status = {$status} order by id desc limit 0,30') 
(SELECT * FROM application where status = '$status' order by id desc limit 0,30') 

            AND 
SELECT * FROM application where status = $status order by id desc limit 0,30 

versucht haben und immer noch funktioniert nichts

ist meine Tabellenstruktur als

1 id Primary int(11) 
2 _customer_id char(8) 
3 personal_id int(11) 
4 emp_id int(11) 
5 fin_id int(11) 
6 status varchar(100) 

Die Art und Weise i folgt bin Aufruf der Methode ist wie folgt >>

  $app = Application::readAlllisted("pending"); 
       foreach($app as $r){ 
       echo $r['status']; 
       echo '<br/>'; 
       echo $r['personal_id']; 
       echo '<br/>'; 
       echo $r['emp_id']; 
       echo '<br/>'; 

      } 
      ?> 
+0

''SELECT * FROM Anwendung mit Status = {$ status} Reihenfolge mit ID desc limit 0,30' 'wird mit'' '(einfache Anführungszeichen) geschlossen. Umschließen Sie es mit '" "doppelte Anführungszeichen – roullie

+0

Sie erhalten eine Ausnahme (glaube ich), aber Sie überprüfen nicht die zurückgegebene Zeichenfolge. Sie benötigen etwas wie' if (is_array ($ app)) {foreach (...)} sonst {echo 'oops, error'. $ app;} ' –

Antwort

0

seit #statut ist ein varchar, damit Sie es zwischen setzen sollten in Ihrer Abfrage versuchen Sie es erneut diese mit ‚‚$ statut..‘‘:

$results = $dbh->query("SELECT * FROM application where status = '".$status."' order by id desc limit 0,30"); 

nach dieser Anfrage versuchen, es zu debuggen und das Ergebnis sehen Inhalt durch Eingabe

$app = Application::readAlllisted("pending"); 
print_r($app);//to see if the query is really getting result or not if every thing is okay so you can print the data you want by acceding the associative array 
+0

Vielen Dank Kumpel, ich schätze Ihre schnelle Unterstützung sehr. –

1

Ihre Anfrage ist richtig, aber Sie haben es beiliegt ', nur ändern, um " wie folgt vor:

$results = $dbh->query("SELECT * FROM application where status = $status order by id desc limit 0,30"); 

Und es sollte gut funktionieren. Weil Strings mit einfachen Anführungszeichen so wie sie sind (eine Zeichenkette) inklusive Variablen zurückgegeben werden. In Ihrem Fall sucht die Abfrage, die auf MySQL ausgeführt wird, buchstäblich nach Zeilen mit dem Statuswert '$ status'.