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.