【发布时间】:2014-02-08 07:39:39
【问题描述】:
我在下面的查询中遇到了一些问题。如果数据库中已经有一行用户,我希望它运行 UPDATE 查询。我希望它插入一行包含这些值,或者像查询中所说的那样用这些值更新一行。
我收到以下错误:
语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 'SET balance='40', xplevel='36' WHERE username='nibblenews' AND server='Factions'' at line 1' 附近使用正确的语法
$stmt = $db->prepare('INSERT INTO stats (balance, xplevel, username, server) VALUES (:balance, :xp, :username, :server) ON DUPLICATE KEY UPDATE stats SET balance=:balance2, xplevel=:xp2 WHERE username=:username2 AND server=:server2');
$stmt->bindParam(':balance', $balance, PDO::PARAM_STR);
$stmt->bindParam(':balance2', $balance, PDO::PARAM_STR);
$stmt->bindParam(':xp', $xp, PDO::PARAM_STR);
$stmt->bindParam(':xp2', $xp, PDO::PARAM_STR);
$stmt->bindParam(':username', $username, PDO::PARAM_STR);
$stmt->bindParam(':username2', $username, PDO::PARAM_STR);
$stmt->bindParam(':server', $server, PDO::PARAM_STR);
$stmt->bindParam(':server2', $server, PDO::PARAM_STR);
$stmt->execute();
【问题讨论】:
-
什么是“一些问题”?你期望什么,你得到什么?
-
我希望它插入一行带有值的行,或者像查询中所说的那样用这些值更新一行。我收到
yntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET balance='40', xplevel='36' WHERE username='nibblenews' AND server='Factions'' at line 1' -
@sonam 是 ON DUPLICATE KEY UPDATE 的点,它会为您选择检查记录是否存在并采取适当的操作(插入或更新现有)
-
@sonam 这不完全正确,MySQL 支持在一个查询中完成:dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html