PDO error SQLSTATE[42000]
Ik ben met een nieuw project bezig en omdat mysql er waarschijnlijk uitgaat ben ik begonnen met pdo echter krijg ik een error en ik heb geen idee hoe ik deze moet fixen.
error:
Code (php)
1
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 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 ''italie' WHERE id='7'' at line 1' in /home/***/public_html/index.php:17 Stack trace: #0 /home/***/public_html/index.php(17): PDOStatement->execute() #1 {main} thrown in /home/***/public_html/index.php on line 17
code:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
$land=$row['last_country'];
$id=$row['id'];
$query = $pdo->prepare("SELECT * FROM :land WHERE id=:id");
$query->bindValue(':land',$land,PDO::PARAM_STR);
$query->bindValue(':id',$id,PDO::PARAM_INT);
$query->execute();
$last_country=$query->fetch()
$id=$row['id'];
$query = $pdo->prepare("SELECT * FROM :land WHERE id=:id");
$query->bindValue(':land',$land,PDO::PARAM_STR);
$query->bindValue(':id',$id,PDO::PARAM_INT);
$query->execute();
$last_country=$query->fetch()
hopelijk zin jullie de error of kunnen jullie me helpen
Gewijzigd op 20/08/2013 15:33:55 door Bram van Aggelen
Daarnaast genereert de PDO dus enkele haakjes om de integer 'id' heen.
Even wat anders... jij hebt voor elk land een andere tabel???
De backticks zijn weg, hij zet niet aleen de quotes aan het einde van id maar ook aan het begin van het land, heel raar.Daar was ik al achter, echter weet ik niet hoe ik het moet fixen.
Verder, ja ik heb voor elk land een andere tabel.
Gewijzigd op 20/08/2013 15:34:24 door Bram van Aggelen
Bram van Aggelen op 20/08/2013 15:33:32:
Verder, ja ik heb voor elk land een andere tabel.
Dat kan geen goed idee zijn.
We kunnen best eerst dit probleem aanpakken.
Je gaat nooit een extra tabel maken omdat er een nieuwe waarde is.
Kan je uitleggen wat je redenering is om een tabel per land te hebben?
Dan vertellen wij hoe het anders kan
Kris Peeters op 20/08/2013 15:43:05:
Dat kan geen goed idee zijn.
We kunnen best eerst dit probleem aanpakken.
Je gaat nooit een extra tabel maken omdat er een nieuwe waarde is.
Kan je uitleggen wat je redenering is om een tabel per land te hebben?
Dan vertellen wij hoe het anders kan
Bram van Aggelen op 20/08/2013 15:33:32:
Verder, ja ik heb voor elk land een andere tabel.
Dat kan geen goed idee zijn.
We kunnen best eerst dit probleem aanpakken.
Je gaat nooit een extra tabel maken omdat er een nieuwe waarde is.
Kan je uitleggen wat je redenering is om een tabel per land te hebben?
Dan vertellen wij hoe het anders kan
De tabel per land is zo omdat er in elk land voor alles (behalve credits) andere waardes zijn, wij dachten dat dit dan de beste oplossing is
Okay, ik ken jouw context niet, maar een voorbeeld:
Een tabel "gebruikers". En je wil weten welke munteenheid die gebruiker gebruikt.
1 van de velden van gebruikers is land.
Dan doe je dit:
SELECT naam, landen.munteenheid AS munt
FROM gebruikers
INNER JOIN landen ON gebruikers.land = landen.land
Bij elke $row gebruikers krijg je dus gratis alle eigenschappen mee van dat specifieke land.
Zoek een tutorial "INNER JOIN". Ofwel tutorial "normaliseren"
Gewijzigd op 20/08/2013 16:06:03 door Kris Peeters
Kris Peeters op 20/08/2013 16:04:08:
Wat je nodig hebt, is een tabel "landen". Daarin zet je de dingen die specifiek zijn aan dat land.
Okay, ik ken jouw context niet, maar een voorbeeld:
Een tabel "gebruikers". En je wil weten welke munteenheid die gebruiker gebruikt.
1 van de velden van gebruikers is land.
Dan doe je dit:
SELECT naam, landen.munteenheid AS munt
FROM gebruikers
INNER JOIN landen ON gebruikers.land = landen.land
Bij elke $row gebruikers krijg je dus gratis alle eigenschappen mee van dat specifieke land.
Zoek een tutorial "INNER JOIN". Ofwel tutorial "normaliseren"
Okay, ik ken jouw context niet, maar een voorbeeld:
Een tabel "gebruikers". En je wil weten welke munteenheid die gebruiker gebruikt.
1 van de velden van gebruikers is land.
Dan doe je dit:
SELECT naam, landen.munteenheid AS munt
FROM gebruikers
INNER JOIN landen ON gebruikers.land = landen.land
Bij elke $row gebruikers krijg je dus gratis alle eigenschappen mee van dat specifieke land.
Zoek een tutorial "INNER JOIN". Ofwel tutorial "normaliseren"
Het betreft hier een maffia game, geen webshop of zoiets, mss was dat handig om erbij te zetten. Het gaat dus om speel landen
Een nieuwe waarde, daarvoor heb je een nieuwe rij nodig. Nooit een nieuwe tabel.
Ook bij maffiaspelen, voetbaltoernooien, postzegelverzamelingen ...
Verzin zelf eens een tabel "landen" waarin je zet wat specifiek is aan dat land
en/of probeer ons te tonen waarom je vindt dat dat niet samen in 1 tabel kan.
Wat kan een Belgische Don dat een Italiaanse Don niet kan? (en ik heb het uiteraard over database dingen)
landen zijn speel landen wat betekend dat je daar andere cash hebt dan een ander land, de gebruikers komen enkel uit nederland en belgie, wat betekend dat elke user in meerdere landen een rij heeft. dus dan is waarschijnlijk dit wel het beste
bv.
noem de tabel gebruiker_land (vaak kan je daar een meer sexy naam voor vinden. Voel je vrij...)
dus tabel gebruiker_land met velden id, gebruiker, land, cash
En na cash eventueel alle andere waarden die je daar kan opslaan.
Dan wordt dat bv.
Code (php)
1
2
3
4
2
3
4
SELECT gebruikers.naam AS gebruiker, landen.munteenheid AS munt, gebruiker_land.cash AS cash
FROM gebruiker_land
INNER JOIN gebruikers ON gebruikers.id = gebruiker_land.gebruiker
INNER JOIN landen ON landen.land = gebruiker_land.land
FROM gebruiker_land
INNER JOIN gebruikers ON gebruikers.id = gebruiker_land.gebruiker
INNER JOIN landen ON landen.land = gebruiker_land.land
In de while(mysql_fetch...) heb je dus
$row['gebruiker'], $row['munt'] en $row['cash']
alsof alles uit 1 tabel kwam.
We hebben alles al heel goed uitgedacht btt de database. Het enige wat ons nog tegen houd is die error
Neemt niet weg dat Kris een zeer terechte opmerking maakt, zo goed is het niet uitgedacht.
deze kan dicht, het is gefixt