Wat je ziet is table
is een van de MySQL gereserveerde woorden
maar u probeert het als kolomnaam te gebruiken. Je kolom heet eigenlijk table_name
op basis van je vraag.
Een zoekopdracht met tijdelijke aanduidingen ziet er als volgt uit:
INSERT INTO votes (ip, table_name, imgid)
VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE
ip=VALUES(ip),
table_name= VALUES(table_name),
imgid=VALUES(imgid)
Onthouden met mysqli
u kunt deze query als volgt uitvoeren:
$sth = $mysqli->prepare("...");
$sth->bind_param("sss", $_SERVER['REMOTE_ADDR'], $table, $imgid);
$sth->execute();
De documentatie beschrijft dit proces in meer detail, maar de "sss"
ding verwijst naar drie strings, en de drie waarden worden doorgegeven als parameters.
Je zou waarschijnlijk BOB
omdat het een stuk minder kieskeurig is om te gebruiken dan mysqli
. Nog beter zou zijn om een databaseframework te gebruiken zoals Doctrine
om veel van het vuile SQL-werk voor u te doen. Nog beter zou zijn om een framework te gebruiken zoals CodeIgnighter
, CakePHP
of FuelPHP
om je een basis te geven om op voort te bouwen. Applicaties van de grond af met de hand bouwen is extreem tijdrovend en aanzienlijk foutgevoeliger.
Een ander ding om op te merken is dat je moet proberen consistente naamgeving in je code te gebruiken. Je verwijst naar $table
als een waarde voor table_name
, dus het zou vermoedelijk $table_name
moeten zijn om mee te beginnen.