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
Haal die rare backticks eens weg.
Daarnaast genereert de PDO dus enkele haakjes om de integer 'id' heen.

Even wat anders... jij hebt voor elk land een andere tabel???
@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.

Verder, ja ik heb voor elk land een andere tabel.
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

[quote="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
[/quote]

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
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"
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"


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
Dan heb je een koppeltabel nodig.

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.
@kris

We hebben alles al heel goed uitgedacht btt de database. Het enige wat ons nog tegen houd is die error

Reageren