我正在尝试创建一个SQL查询:
这是我的代码
$vote_new_total = $vote_total + $vote;
$vote_count = $vote_count + 1;
$query = " INSERT INTO cute_review_vote (vote_total, vote_count)
VALUES ('$vote_new_total', '$vote_count')
ON DUPLICATE KEY UPDATE vote_total = $vote_new_total, vote_count = $vote_count
WHERE post_id = $post_id";
mysql_query($query) or trigger_error(mysql_error()." in ".$sql);
但是,我一直收到以下错误:
注意:您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以便在' WHERE post_id = 214748364'附近使用正确的语法。在第68行的C:\ xampp \ htdocs \ xbm-vote \ do_vote.php第4行
这是我的语法问题还是我错过了比这更明显的东西?
非常感谢任何帮助/建议。感谢。
答案 0 :(得分:2)
where
声明没有ON DUPLICATE
。始终检查语法:http://dev.mysql.com/doc/refman/5.6/en/insert-on-duplicate.html
此外,这不是一个安全的查询。把它变成准备好的陈述。 http://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php
编辑:更新答案,因为OP并不了解ON DUPLICATE
声明的用法:
ON DUPLICATE
会考虑您尝试插入KEY
值。
考虑示例表:
CREATE TABLE `user` (
`email` varchar(50) NOT NULL,
`name` varchar(20) NOT NULL,
`is_active` tinyint(4) NOT NULL,
`datecreated` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`email`)
);
查询:
INSERT INTO user (email, name, is_active) VALUES ("user@user.com", "User", 1)
ON DUPLICATE KEY UPDATE name = "User Edited", is_active = 0
由于我们将PRIMARY KEY
设置为email
,并且insert语句正在插入密钥,因此,在您第二次运行查询时,ON DUPLICATE
将运行一次email
已经在桌面上,因为它是KEY
,您尝试再次插入,但是您定义了ON DUPLICATE KEY ...
。
如果表格使用AUTO_INCREMENT
列投放,您很可能必须SELECT post_id
使用WHERE
语句应用某些过滤器。
答案 1 :(得分:0)
好的,我发现了我的问题。
INSERT INTO cute_review_vote (post_id, vote_total, vote_count)
VALUES ('$post_id', '$vote_new_total', '$vote_count')
ON DUPLICATE KEY UPDATE vote_total = $vote_new_total, vote_count = $vote_count
感谢Fabiano,我意识到WHERE子句不是必需的。
WHERE post_id = $post_id"
只需在INSERT INTO命令中定义数据库条目即可替换。