Lo que estás viendo es table
es una de las palabras reservadas de MySQL
pero está tratando de usarlo como nombre de columna. Su columna en realidad se llama table_name
Sin embargo, según tu pregunta.
Una consulta con marcadores de posición se ve así:
INSERT INTO votes (ip, table_name, imgid)
VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE
ip=VALUES(ip),
table_name= VALUES(table_name),
imgid=VALUES(imgid)
Recuerda con mysqli
puede ejecutar esta consulta haciendo esto:
$sth = $mysqli->prepare("...");
$sth->bind_param("sss", $_SERVER['REMOTE_ADDR'], $table, $imgid);
$sth->execute();
La documentación describe este proceso con más detalle, pero el "sss"
cosa se refiere a tres cadenas, y los tres valores se pasan como parámetros.
Probablemente debería estar usando DOP
ya que es mucho menos complicado de usar que mysqli
. Aún mejor sería usar un marco de base de datos como Doctrine
para hacer mucho del trabajo sucio de SQL por usted. Aún mejor sería usar un marco como CodeIgnighter
, CakePHP
o FuelPHP
para darle una base sobre la cual construir. Construir aplicaciones a mano desde cero requiere mucho tiempo y es significativamente más propenso a errores.
Otra cosa a tener en cuenta es que debe intentar usar nombres consistentes en su código. Te refieres a $table
como valor para table_name
, por lo que presumiblemente debería ser $table_name
para empezar.