Was Sie sehen, ist table
ist eines der für MySQL reservierten Wörter
aber Sie versuchen, es als Spaltennamen zu verwenden. Ihre Spalte heißt eigentlich table_name
basierend auf deiner Frage.
Eine Abfrage mit Platzhaltern sieht so aus:
INSERT INTO votes (ip, table_name, imgid)
VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE
ip=VALUES(ip),
table_name= VALUES(table_name),
imgid=VALUES(imgid)
Erinnern Sie sich mit mysqli
Sie können diese Abfrage folgendermaßen ausführen:
$sth = $mysqli->prepare("...");
$sth->bind_param("sss", $_SERVER['REMOTE_ADDR'], $table, $imgid);
$sth->execute();
Die Dokumentation beschreibt diesen Vorgang ausführlicher, aber der "sss"
thing bezieht sich auf drei Strings, und die drei Werte werden als Parameter übergeben.
Sie sollten wahrscheinlich PDO
da es viel weniger umständlich zu verwenden ist als mysqli
. Noch besser wäre es, ein Datenbank-Framework wie Doctrine
zu verwenden um einen Großteil der SQL-Drecksarbeit für Sie zu erledigen. Noch besser wäre es, ein Framework wie CodeIgnighter
zu verwenden , CakePHP
oder FuelPHP
um Ihnen eine Grundlage zu geben, auf der Sie aufbauen können. Anwendungen von Grund auf per Hand zu konstruieren ist extrem zeitaufwändig und deutlich fehleranfälliger.
Eine weitere zu beachtende Sache ist, dass Sie versuchen sollten, konsistente Namen in Ihrem Code zu verwenden. Sie beziehen sich auf $table
als Wert für table_name
, also sollte es vermutlich $table_name
sein zu beginnen.