Những gì bạn đang thấy là table
là một trong những các từ dành riêng cho MySQL
nhưng bạn đang cố gắng sử dụng nó làm tên cột. Cột của bạn thực sự được gọi là table_name
dựa trên câu hỏi của bạn.
Một truy vấn với trình giữ chỗ trông giống như sau:
INSERT INTO votes (ip, table_name, imgid)
VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE
ip=VALUES(ip),
table_name= VALUES(table_name),
imgid=VALUES(imgid)
Ghi nhớ với mysqli
bạn có thể thực hiện truy vấn này bằng cách thực hiện điều này:
$sth = $mysqli->prepare("...");
$sth->bind_param("sss", $_SERVER['REMOTE_ADDR'], $table, $imgid);
$sth->execute();
Tài liệu mô tả quy trình này chi tiết hơn, nhưng "sss"
điều đề cập đến ba chuỗi và ba giá trị được chuyển vào dưới dạng tham số.
Có lẽ bạn nên sử dụng PDO
vì nó ít kén chọn sử dụng hơn mysqli
. Tốt hơn nữa là sử dụng khung cơ sở dữ liệu như Doctrine
để thực hiện rất nhiều công việc bẩn thỉu của SQL cho bạn. Thậm chí tốt hơn vẫn là sử dụng một khuôn khổ như CodeIgnighter
, CakePHP
hoặc FuelPHP
để cung cấp cho bạn một nền tảng để xây dựng. Việc xây dựng các ứng dụng bằng tay từ đầu cực kỳ tốn thời gian và dễ xảy ra lỗi hơn đáng kể.
Một điều cần lưu ý nữa là bạn nên thử và sử dụng cách đặt tên nhất quán trong mã của mình. Bạn tham khảo $table
làm giá trị cho table_name
, vì vậy nó có lẽ phải là $table_name
để bắt đầu với.