To, co vidíte, je table
je jedním z vyhrazených slov MySQL
ale pokoušíte se jej použít jako název sloupce. Váš sloupec se ve skutečnosti nazývá table_name
na základě vaší otázky.
Dotaz se zástupnými symboly vypadá takto:
INSERT INTO votes (ip, table_name, imgid)
VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE
ip=VALUES(ip),
table_name= VALUES(table_name),
imgid=VALUES(imgid)
Pamatujte pomocí mysqli
tento dotaz můžete provést takto:
$sth = $mysqli->prepare("...");
$sth->bind_param("sss", $_SERVER['REMOTE_ADDR'], $table, $imgid);
$sth->execute();
Dokumentace popisuje tento proces podrobněji, ale "sss"
věc odkazuje na tři řetězce a tyto tři hodnoty jsou předány jako parametry.
Pravděpodobně byste měli používat CHOP
protože je mnohem méně náročný na použití než mysqli
. Ještě lepší by bylo použít databázový rámec jako Doctrine
dělat spoustu špinavé práce SQL za vás. Ještě lepší by bylo použít rámec jako CodeIgnighter
, CakePHP
nebo FuelPHP
dát vám základ, na kterém můžete stavět. Ruční vytváření aplikací od základů je extrémně časově náročné a výrazně náchylnější k chybám.
Další věc, kterou je třeba poznamenat, je, že byste se měli ve svém kódu pokusit používat konzistentní pojmenování. Odkazujete na $table
jako hodnotu pro table_name
, takže by to mělo být pravděpodobně $table_name
pro začátek.