gebruik van ` in queries
Maar als ik bij mijn ene tabel (groep) een query = "SELECT * FROM groep" uitvoer geeft deze een error.
maak ik daarvan * FROM `groep` dan werkt alles perfect ???
Dit is de eerste keer dat ik dit heb, bij andere tables heb ik dit niet en vroeg me af wat hiervan de oorzaak kan zijn.
Ik zie ook nergens een fout in de constructie van de tabel ofz.
Heeft iemand dit ook al gehad en heb je dit kunnen oplossen ?
Alvast bedankt
Sander
Wat is de echte foutmelding?
Als ik de ` komt die error er dus niet op en begrijp zelf niet waarom :)
Dat is niet de juiste error neem ik aan. De query is waarschijnlijk mislukt en die error moet je hebben.
en geef je code is...
Code (php)
1
2
3
2
3
$query = mysql_query("SELECT * FROM `group`");
while($row = mysql_fetch_array($query, MYSQL_ASSOC)) {
while($row = mysql_fetch_array($query, MYSQL_ASSOC)) {
deze niet
Code (php)
1
2
3
2
3
$query = mysql_query("SELECT * FROM group");
while($row = mysql_fetch_array($query, MYSQL_ASSOC)) {
while($row = mysql_fetch_array($query, MYSQL_ASSOC)) {
Als ik code nr.2 gebruik krijg ik dus die warning error van mysql_fetch_array()
by nr.1 niet; daar wordt mijn tabel gewoon getoond zoals het moet.
Zet ik er een or die(mysql_error)) bij dan geeft die mij het volgende weer:
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 'group' at line 1
Maar ik zie dus geen fout in mij syntax :s
Want er is er geen, verander ik mijn tabel group naar users dan komt alles perfect weer naar boven :)
Group is een reserved word en mag je niet gebruiken.
en backticks mag je ook niet gebruiken
Zorg dus altijd dat je een data model hebt waarin geen gereserveerde namen voorkomen. Ga je vertrouwen op backtics dan ben je verkeerd bezig. Je kunt namelijk al je data ermee om zeep helpen.
Stel je noemt een database "delete". Je krijgt dan queries als: SELECT veld FROM delete. Dit zal een error geven, aangezien dit geen correcte SQL is.
Ga je echter backtics toevoegen dan krijg je: SELECT veld FROM `delete`. Dit zal geen errors geven en je kunt keurig netjes je query uitvoeren. Lijkt dus een ideale situatie....
Totdat je een keertje een fout maakt en je perongelijk een DELETE FROM query hebt staan. Hop daar gaat je data. Gelukkig heb je nog wel een backup maar het levert toch een hoop problemen op.
Conclusie: Wanneer je een query hebt die wel werkt met backtics maar niet zonder, dan zit er wat fout in je datamodel. Dat moet je niet op gaan lossen door backtics te gebruiken maar door je datamodel aan te passen.
- true;
- false;
- mysql result resource (Bij SELECT queries)
false als de query niet gelukt is! Dus controlleer dat even:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$sql = "SELECT kolom FROM tabel";
$res = mysql_query($sql);
if($res){ // resource!
}
else{
echo 'errno: '.mysql_errno($connection).' => '.mysql_error($connection).'<br />'.PHP_EOL;
}
?>
$sql = "SELECT kolom FROM tabel";
$res = mysql_query($sql);
if($res){ // resource!
}
else{
echo 'errno: '.mysql_errno($connection).' => '.mysql_error($connection).'<br />'.PHP_EOL;
}
?>
Dan zal je een betere foutmelding krijgen.
Backticks stellen je instaat om gereserveerde woorden te gebruiken.
Allemaal leuk en aardig tot je het een keer vergeet inderdaad...
Zoeizo heeft mysql eigenlijk wel wat tweaks nodig om een beetje normaal te functioneren. Zelfs op een host kan je het e.e.a. al aardig verbeteren met settings. Lees ook: http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html
ok wist ik eigenlijk niet. Mijn PMA gaf me daar nergens een waarschwing over :)
Met een andere naam werkt het inderdaad.
Bedankt voor de tips en de hulp :)
Sander
PMA is dan ook wel ongeveer de slechteste tool om je mysql database mee te onderhouden.
Ik heb een WAMP server hier dus het zat in 'the package'
Wat is dan een beter 'tool' misschien ?
http://www.sqlmanager.net/products/mysql/manager
Dan heb je er nog wel meer... bijvoorbeeld.
http://mysql.navicat.com/
PMA is een webbased applicatie die elke host er maar gratis bijleverd zo ongeveer. Daardoor wel populair, maar dat wil niet zeggen dat het ook daadwerkelijk een goed product is!
En dat geldt eigenlijk in z'n geheel voor de mysql database.