2016-10-19 5 views
2

Ich bin eine vorbereitete Auswahl Abfrage erstellt und es scheint, die Abfrage nicht die DESC abholen oder ich habe die bind_param strukturiert falsch. Ich versuche, die letzte id des Bildes von user_id anzuzeigen. Das Bild des Benutzers wird angezeigt, aber es ist das erste ID-Bild, das sie haben. Ich habe versucht, ASC zu tun, und es war das Gleiche.Wählen Sie den Auftrag der Abfrage nicht in vorbereiteten Anweisung

Mache ich das richtig?

$sql = " 
    SELECT * 
    FROM profile_img 
    WHERE user_id = ? 
    ORDER BY ? DESC LIMIT 1 
    "; 
    if ($stmt = $con->prepare($sql)) { 
     $stmt->bind_param("ss", $user_id, `id`); 
     $stmt->execute(); 
     if (!$stmt->errno) { 
      // Handle error here 
     } 
     $stmt->bind_result($id, $user_id, $profilePic); 

     $pics = array(); 
     while ($stmt->fetch()) { 
      $pics[] = $profilePic; 
     } 

     echo '<img id="home-profile-pic" src=" '.$profilePic.'">'; 
    } 

Antwort

5

Ich glaube nicht, können Sie:

  • Verwenden Platzhalter in einer Reihenfolge von Klausel
  • Bind Spaltennamen: Sie können nur Werte binden können - oder Variablen und haben ihren Wert injiziert in die vorbereitete Aussage.

You can use number instead of field name in the 'order by' clause

+0

Dies hat den Trick. Ich habe den Namen der verknüpften Spalte entfernt und den Platzhalter damit ersetzt. Vielen Dank! – Paul

0

Warum haben Sie setzen? nach "Bestellung von" Aussage?

Ihre Bestellung durch entweder id Ihrer „profile_img“ Tabelle oder ein Zeitstempel-Feld in der Tabelle verweisen ...

z.B. $sql = " SELECT * FROM profile_img WHERE user_id = ? ORDER BY id DESC LIMIT 1 ";

hier ersetzen id (i diesen Namen gehe davon) mit dem Primärschlüsselfeld Name Profile_image Tabelle

oder

$sql = " 
SELECT * 
FROM profile_img 
WHERE user_id = ? 
ORDER BY created_on DESC LIMIT 1 
"; 

hier created_on (was ich auch angenommen haben) können durch jedes ersetzt werden timestamp Feld wenn Sie irgendwelche in profile_img Tabelle

Verwandte Themen