You have an error in your SQL syntax

Status
Niet open voor verdere reacties.

Radio247

Gebruiker
Lid geworden
8 dec 2011
Berichten
31
Ik krijg onderstaande foutmelding.

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''20'' at line 1

De "20" staat voor een aantal welke wordt aangevraagd uit de database via een functie.

Hieronder de volledige database aanroep.

PHP:
$sql = "SELECT * FROM cpl_stemlijst WHERE typeplaat = 'top20' AND site='Y' ORDER BY gemiddeld DESC, stemmen ASC LIMIT '".$max_nummers."'";
$result = mysqli_query($conn, $sql) or die(mysqli_error($conn));

Kan iemand mij uitleggen wat ik over het hoofd zie?

Alvast bedankt.
 
Waarom je getal tussen single-quotes? Het is geen string.
 
Waarom je getal tussen single-quotes? Het is geen string.

Als ik die weg laat verdwijnt de weergave van het getal in de foutmelding en lijkt er dus ook geen getal aanwezig te zijn.

Het is overigens een onderdeel van een nogal uitgebreide functie, misschien dat dat er iets mee te maken heeft?
 
Lijkt mij sterk...
Of $max_nummers heeft gewoon geen waarde, en dat staat er dan los van.

Wat heb je nu dan aangepast?
 
De query is een string, maak dan van het getal ook een string, en plak dan alles aan elkaar ;)
PHP:
$sql = "SELECT * FROM cpl_stemlijst WHERE typeplaat='top20' AND site='Y' ORDER BY gemiddeld DESC, stemmen ASC LIMIT " . strval($max_nummers);
 
De query is een string, maak dan van het getal ook een string, en plak dan alles aan elkaar ;)
PHP:
$sql = "SELECT * FROM cpl_stemlijst WHERE typeplaat='top20' AND site='Y' ORDER BY gemiddeld DESC, stemmen ASC LIMIT " . strval($max_nummers);

Als ik het script aanpas naar het voorbeeld krijg ik dus onderstaande foutmelding.
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'LIMIT20' at line 1

Bij het script aanpassen naar
$sql = "SELECT * FROM cpl_stemlijst WHERE typeplaat = 'top20' AND site='Y' ORDER BY gemiddeld DESC, stemmen ASC LIMIT".$max_nummers;
wordt de foutmelding:
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'LIMIT20
' at line 1

Ik snap dan ook totaal niet wat er fout kan gaan...:confused:
 
Zie #5. Je bent een spatie vergeten na LIMIT
 
Tipje: Als je queries dynamisch zijn (gevoed worden door functies of variabelen) en niet doen wat ze moeten doen...
Echo dan de $sql, zodat je ziet wat de query is die uitgevoerd wordt.

PHP:
<?php
$sql = "SELECT * FROM cpl_stemlijst WHERE typeplaat = 'top20' AND site='Y' ORDER BY gemiddeld DESC, stemmen ASC LIMIT ".intval($max_nummers);
echo "Query is: ".$sql;
$result = mysqli_query($conn, $sql) or die(mysqli_error($conn));
?>

Nog een goede tip:
Gebruik bij uitgebreide queries gerust een enter om het overzichtelijker te maken.
 
Laatst bewerkt:
Zie mijn vorige post over de debuggen van je query. ⬆
Wat komt daar uit?

Nog een tipje:

Verder raad ik af om or die() te gebruiken. Waarom zou bij een foute query je script direct dood moeten gaan?
Handel het dan liever netjes met if - else af door te melden dat 'er een fout is opgetreden op je website'. Bij sterke voorkeur log je de foutmelding uit mysqli_error($conn) in een apart bestand, want anderen hebben niks aan je foutmelding. Anders maak je andere mensen onnodig wijzer over de opbouw van je site dan ze al zijn. :)
 
Laatst bewerkt:
Met Aar eens. Bij de "echo" heb je zelfs een aantal mogelijkheden.
PHP:
// 1.  Toon waarde $sql op het scherm
echo $sql;

// 2.  Als bij 1. maar nu in monospace lettertype
echo "<code>", $sql, "</code>";

// 3.  Als bij 2. maar nu worden ook alle spaties, tabs en enters getoond
echo "<pre>", $sql, "</pre>";
 
Grappig dat je een komma gebruikt, en dat dit ook werkt. :D
Ik gebruik altijd punten om een string aan een andere type (zoals hier een variabele) te koppelen.
 
Zie mijn vorige post over de debuggen van je query. ⬆
Wat komt daar uit?

Nog een tipje:

Verder raad ik af om or die() te gebruiken. Waarom zou bij een foute query je script direct dood moeten gaan?
Handel het dan liever netjes met if - else af door te melden dat 'er een fout is opgetreden op je website'. Bij sterke voorkeur log je de foutmelding uit mysqli_error($conn) in een apart bestand, want anderen hebben niks aan je foutmelding. Anders maak je andere mensen onnodig wijzer over de opbouw van je site dan ze al zijn. :)

Dank;
".intval in plaats van ".strval was de oplossing...

Dit had ik dus zelf nooit gevonden.... daarvoor heb ik duidelijk te weinig kennis...

Was wel aan het testen geweest met de sql echo'n maar dat gaf geen uitsluiting...

Weer een stapje verder gekomen... DANK
 
Een komma laat de goede volgorde zien omdat elke expressie apart door echo wordt behandeld.
In de praktijk kom je de onzin hieronder niet gauw tegen, het is slechts een voorbeeld.
PHP:
echo implode() . "test" . sin();
// output: warning implode() --> warming sin() --> string "test"

echo implode() , "test" , sin();
// output: warning implode() --> string "test" --> warming sin()

Bij gebruik van een punt klopt de volgorde van de output niet.
Dit komt omdat php eerst de functies uitvoert voordat echo er een string van maakt.


-- Dit doe ik alleen bij echo uiteraard ;) verder gebruik ik gewoon de punt om strings te koppelen
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan