Това, което виждате, е table
е една от запазените думи на MySQL
но се опитвате да го използвате като име на колона. Вашата колона всъщност се нарича table_name
въз основа на вашия въпрос обаче.
Заявка с контейнери изглежда така:
INSERT INTO votes (ip, table_name, imgid)
VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE
ip=VALUES(ip),
table_name= VALUES(table_name),
imgid=VALUES(imgid)
Запомнете с mysqli
можете да изпълните тази заявка, като направите следното:
$sth = $mysqli->prepare("...");
$sth->bind_param("sss", $_SERVER['REMOTE_ADDR'], $table, $imgid);
$sth->execute();
Документацията описва този процес по-подробно, но "sss"
нещо се отнася до три низа и трите стойности се предават като параметри.
Вероятно трябва да използвате PDO
тъй като е много по-малко придирчив за използване от mysqli
. Още по-добре би било да използвате рамка на база данни като Doctrine
да свърши голяма част от SQL мръсната работа вместо вас. Още по-добре би било да използвате рамка като CodeIgnighter
, CakePHP
или FuelPHP
да ви даде основа, върху която да градите. Ръчното конструиране на приложения от нулата отнема изключително много време и е значително по-податливо на грешки.
Друго нещо, което трябва да отбележите, е, че трябва да опитате да използвате последователно именуване във вашия код. Препращате към $table
като стойност за table_name
, така че вероятно трябва да е $table_name
за начало.