Die richtige syntax near 'ORDER BY Datum DESC LIMIT 1' in Zeile 4
Ich erhalte immer folgende Fehlermeldung:
Haben Sie einen Fehler in Ihrer SQL-syntax; Lesen Sie im Handbuch, das entspricht Ihrer MySQL-server-version für den richtigen syntax in der Nähe 'ORDER BY Datum DESC LIMIT 1' in Zeile 4
function printSoldiersOfRank($rank, $branch)
{
$soldier = new soldierClass;
$sql = "SELECT * FROM soldier WHERE rank = $rank AND branch = '$branch'";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result)):
$soldier->getInfo($row['sID']);
$soldier->printInfo();
endwhile;
function printInfo()
{
$sql = "SELECT promoter, name, date
FROM soldier s, log l
WHERE s.sID = l.promoter AND l.promotee = $this->sid
ORDER BY date DESC LIMIT 1";
$result = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_array($result);
echo "<div class='soldierInfo'>";
echo "<a href='index.php?page=soldier&sid=$this->sid'>";
echo $this->name;
echo "</a><br />";
echo "Last Promoted: ";
echo date("d M Y", $row['date']);
echo "<br />By: <a href='index.php?page=soldier&sid=$row[0]'>";
echo $row['name'];
echo "</a></div>";
}
Ich gehe davon aus, dass der Fehler in meinem printInfo()
Funktion. Alle Hilfe ist willkommen, danke im Voraus.
- Die Fehlermeldung, die Sie bekommen hat
ORDER BY name
, nicht durchdate
. - Bitte verwenden Sie nicht
mysql_*
Funktionen, neuen code schreiben. Sie werden nicht mehr gepflegt und die Gemeinschaft hat begonnen deprecation-Prozess. Siehe die red box? Stattdessen sollten Sie lernen, über prepared statements und PDO oder MySQLi. Wenn Sie sich nicht entscheiden können, welche, diesem Artikel wird Ihnen helfen. Wenn Sie Holen PDO, hier ist eine gute tutorial. - INJEKTION, lalali, lalada, lala in-ject-la-di-da.
- mögliche Duplikate von Wie Sie verhindern, dass SQL-injection in PHP -?
ORDER BY name
aber in Ihrer Funktion haben SieORDER BY date
. sind Sie sicher, dass Sie in der richtigen sql ?- Dies ist kein dupe. Gut, ich meine, die dummen hilft, aber das ist kein dupe. Dies ist nur ein Vanille-schlechte Frage. Ich meine, ernsthaft, der user konnte sich nicht einmal die Mühe macht, setzen die richtige erroring code in es. Ernsthaft jetzt. Ich meine, komm schon. Wie sollen wir Ihnen eine konkrete, hilfreiche Antwort, wenn Sie nicht geben uns die echten, gebrochenen code!?
date
in welche Tabelle ist das ?soldier
oderlog
- Dir gut da drüben?
- Ich bin mir der Geduldsfaden und ich haben, um zu überleben php für weitere vier Tage, um zu gewinnen eine sinnlose Wette. Nein, ich bin nicht in Ordnung. *twitch*
- Sorry, ich wusste nicht, dass ich falsch gepostet Fehler. log 1 ist dem date.
- Haben Sie sich einmal die Mühe zu überprüfen, was Ihre Abfrage sieht aus wie nach Variablen-substitution? Was die bleep hat
$this->sid
zurück? - An alle: gebt dem Mann eine Pause. @user1933198: $this->sid ist entweder null oder kann nicht analysiert werden, ersetzen Sie es mit '".$dieser->sid."'
- Pause gewährt. Eine
echo $sql = "..."
und überprüfen Sie die gedruckten Abfrage syntax Fehler. Sie könnten in der Lage sein, den Fehler zu beheben sich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht davon ausgehen, dass der Fehler irgendwo. Erstellen Sie stattdessen eine Fehlermeldung, die Ihnen alle Informationen, die Sie Debuggen müssen. Hier ist ein Beispiel.
Wenn Sie so etwas wie, dass, werden Sie in der Lage, um zu sehen, die Abfrage, die gescheitert sind und die Lage des Fehlers mit Gewissheit. Wie es jetzt steht, müssen Sie eine Abfrage mit "ORDER BY Datum DESC" und eine Fehlermeldung, die sagt "ORDER BY name ASC", so dass es verlässt mich zu Fragen, ob wir das richtige Skript!
'date'
DESCdate
ist nicht ein reserviertes Wort in MySQL.Versuchen Sie dies:
$this->sid
enthält nichts und Sie bekommen... AND l.promotee = ORDER BY ...
:o)Wenn Sie eine Fehlermeldung erhalten, die auf eine SQL-Anweisung von MySQL wie
müssen Sie ein Auge auf Ihre Anweisung vor 'xxxx'.
Den SQL-Parser gestoppt Parsen der Anweisung aufgrund eines Fehlers und erzählt, was Sie auf dieser Linie (stop) passiert, und was ist der rest der nicht geparste Anweisung.
In diesem Fall wird die Anweisung (erhalten durch MySQL) wird wie folgt Aussehen (
$this->sid
enthält nichts)Versuchen Sie es und erhalten Sie die gleiche Fehlermeldung.
Sollten Sie überprüfen, ob
$this->sid
enthält etwas nützlich, bevor Sie die Abfrage.BTW: eine parametrisierte Aussage erhalten Sie aus diesem besonderen Falle zu (und einige andere)
Datum ist eine variable geben. Versuchen Sie umschließt das Feld den Namen 'Datum' mit `
Beispiel.
date
ist nicht ein reserviertes Wort und kann verwendet werden, ohne backticks 🙂 dev.mysql.com/doc/refman/5.5/en/reserved-words.htmldate
DESC LIMIT 1' in Zeile 3da u nicht sagen nichts über Ihre Tabellen dann
ordnen Sie Ihre Spalten, indem Sie eine aliace
ich nur erraten und machte
soldier
wenn seinelog
Tabelle dann ändern, wo ess
zul
und stellen Sie das Datum zwischen backtiks , da Datum ist reserviert Wort für mysql