gebruik van ` in queries

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sander

Sander

22/12/2008 21:10:00
Quote Anchor link
Ik zit dus met een script, nu heb ik een paar tables gemaakt waar alles dus werkt.
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
 
PHP hulp

PHP hulp

22/12/2024 20:13:13
 
- SanThe -

- SanThe -

22/12/2008 21:13:00
Quote Anchor link
Wat is de echte foutmelding?
 
Sander

Sander

22/12/2008 21:19:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource


Als ik de ` komt die error er dus niet op en begrijp zelf niet waarom :)
 
- SanThe -

- SanThe -

22/12/2008 21:23:00
Quote Anchor link
Dat is niet de juiste error neem ik aan. De query is waarschijnlijk mislukt en die error moet je hebben.
 
Kumkwat Trender

Kumkwat Trender

22/12/2008 21:23:00
Quote Anchor link
en geef je code is...
 
Sander

Sander

22/12/2008 21:30:00
Quote Anchor link
wel deze werkt wel

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
$query = mysql_query("SELECT * FROM `group`");

while($row = mysql_fetch_array($query, MYSQL_ASSOC)) {


deze niet

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
$query = mysql_query("SELECT * FROM group");

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 :)
 
- SanThe -

- SanThe -

22/12/2008 21:38:00
Quote Anchor link
group is niet groep.

Group is een reserved word en mag je niet gebruiken.
 
Klaasjan Boven

Klaasjan Boven

22/12/2008 22:04:00
Quote Anchor link
en backticks mag je ook niet gebruiken
 
PHP Newbie

PHP Newbie

22/12/2008 22:13:00
Quote Anchor link
Een ` (backtic) stelt je in staat om SQL uit te voeren die je eigenlijk helemaal niet uit mag voeren. "GROUP" is een gereserveerd woord in SQL om bijvoorbeeld een GROUP BY uit te kunnen voeren.

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.
 
Lode

Lode

22/12/2008 23:19:00
Quote Anchor link
mysql_query geeft 1 van 3 dingen terug!
- true;
- false;
- mysql result resource (Bij SELECT queries)

false als de query niet gelukt is! Dus controlleer dat even:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;
}

?>


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
 
Sander

Sander

22/12/2008 23:19:00
Quote Anchor link
aha :)
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
 
Lode

Lode

22/12/2008 23:23:00
Quote Anchor link
PMA is dan ook wel ongeveer de slechteste tool om je mysql database mee te onderhouden.
 
Sander

Sander

22/12/2008 23:28:00
Quote Anchor link
Heb het eigenlijk al sinds het begin gebruikt en nog nooit echte problemen mee gehad (tot vandaag dan :) )
Ik heb een WAMP server hier dus het zat in 'the package'

Wat is dan een beter 'tool' misschien ?
 
Lode

Lode

22/12/2008 23:36:00
Quote Anchor link
De bekendste is denk ik:
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.
 



Overzicht Reageren

 
 

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.