Door
Bram van A
op 20-08-2013 15:19
gewijzigd op 20-08-2013 15:33
1.964 views
Hallow phphulp,
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:
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:
$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()
hopelijk zin jullie de error of kunnen jullie me helpen
@eddy
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.
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"
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"
Het betreft hier een maffia game, geen webshop of zoiets, mss was dat handig om erbij te zetten. Het gaat dus om speel landen
In geen enkel geval kan het een goed idee zijn om een nieuwe tabel te maken voor een nieuwe waarde.
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.
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
In de while(mysql_fetch...) heb je dus
$row['gebruiker'], $row['munt'] en $row['cash']
alsof alles uit 1 tabel kwam.