Debuggen: het oplossen van SQL fouten

Het laatste onderwerp dat ik in deze tutorial wil behandelen, is het herkennen en oplossen van fouten die in SQL queries op kunnen treden.

Doordat we een nette foutafhandeling toepassen en altijd controleren of een query wel gelukt is, kunnen we ook een nette foutmelding geven als dat niet het geval is. Met behulp van mysql_error() is de foutmelding die MySQL geeft te achterhalen. Debuggen gaat steeds makkelijker naarmate je meer ervaring krijgt, dus laten we maar eens naar een aantal voorbeelden gaan kijken.

Query syntax error

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SELECT
FROM
    werknemers
Quote:
Notice: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM werknemers' at line 1

Dit is de standaard syntax waarin een foutmelding over de query syntax gegeven wordt. Eigenlijk is het enige nuttige van deze foutmelding het laatste gedeelte, vanaf 'near'. Dat is namelijk het gedeelte dat aangeeft waar de fout opgetreden is.

Als we inderdaad naar FROM in de query kijken, zien we dat we daarvoor vergeten zijn om de betreffende kolomnamen te noemen.

Unknown column in field list
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT
    naam
FROM
    werknemers
Quote:
Notice: Unknown column 'naam' in 'field list'

Deze foutmelding geeft aan dat de kolom 'naam' die we in de SELECT noemen, niet bestaat. En ja, dat klopt ook. In onze tabel hebben we enkel de kolommen voornaam en achternaam.

No GROUP BY clause
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
SELECT
    salaris_schaal,
    COUNT(id)
FROM
    werknemers
Quote:
Notice: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause

Deze foutmelding wordt gegeven als we in de SELECT clausule zowel een kolomnaam opgeven als een aggregate functie gebruiken. Het is dan namelijk verplicht om een GROUP BY clausule met daarin de kolomnamen die niet in de aggregate functie voorkomen, op te nemen.

Onvolledige GROUP BY
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
SELECT
    voornaam,
    salaris_schaal,
    COUNT(id)
FROM
    werknemers
GROUP BY
    salaris_schaal
Quote:
Notice: 'databasenaam.werknemers.voornaam' isn't in GROUP BY

Deze foutmelding krijgen we alleen als we MySQL in ANSI mode dwingen. De foutmelding geeft aan dat er een bepaalde kolom wel in de SELECT clausule voorkomt maar niet in de GROUP BY, terwijl dat wel zou moeten.

Dit waren enkele voorbeelden van SQL foutmeldingen. Zoals je ziet zijn ze redelijk duidelijk, dus het vinden van fouten in een query mag dan ook niet al teveel problemen opleveren.

« Lees de omschrijving en reacties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.