Php 带有UPDATE语句的PDO问题

Php 带有UPDATE语句的PDO问题,php,mysql,pdo,Php,Mysql,Pdo,我正试图更新表中的一行,结果遇到了麻烦 $username = $_SESSION['username']; $stmt = $db->prepare("UPDATE `players`(`plusadd`,`takeaway`,`dsum`,`msum`) VALUES (:plusadd,:takeaway,:dsum,:msum) WHERE username = :username"); $stmt->execute(array( ':use

我正试图更新表中的一行,结果遇到了麻烦

$username = $_SESSION['username'];
    $stmt = $db->prepare("UPDATE `players`(`plusadd`,`takeaway`,`dsum`,`msum`) 
    VALUES (:plusadd,:takeaway,:dsum,:msum) WHERE username = :username");
    $stmt->execute(array(
    ':username' => $_SESSION['username'],
                    ':plusadd' => $plusadd,
                    ':takeaway' => $takeaway,
                    ':dsum' => $dsum,
                    ':msum' => $msum,               
                ));
我得到以下错误,我剥离了不相关的部分

'(`plusadd`,`takeaway`,`dsum`,`msum`) VALUES 
('2','3','5','1')where username = 'd' 
它也指行

我不确定用户名
d
来自哪里,因为我使用的用户名是demo

下面是全部错误

Fatal error: Uncaught exception 'PDOException' 
with message 'SQLSTATE[42000]: Syntax 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 '(`plusadd`,`takeaway`,`dsum`,`msum`) 
VALUES ('2','3','5','1')where username = 'd' at 
line 1' in www\grade.php:54 Stack trace: #0 
www\grade.php(54): PDOStatement->execute(Array) 
#1 {main} thrown in www\grade.php on line 54
你可能想插入,而不是更新,所以我相信

"INSERT into `players` (`plusadd`,`takeaway`,`dsum`,`msum`) ...
否则,如果要执行更新,则需要使用
SET

即:

如果更新是您希望执行的操作

否则,请使用插入到中的

  • 这就是为什么会出现SQL错误

插入和更新的语法混淆了

更新如下:

UPDATE tablename SET column = value, column = value, ... 
WHERE condition;
INSERT INTO tablename (columns...) VALUES (values...);
插入如下所示:

UPDATE tablename SET column = value, column = value, ... 
WHERE condition;
INSERT INTO tablename (columns...) VALUES (values...);
Insert不支持WHERE子句,因为如果插入新行,该行自然还不存在,因此使用WHERE条件查找该行是没有意义的

MySQL支持INSERT的另一种语法,使其看起来类似于UPDATE语句:

INSERT INTO tablename SET column = value, column = value, ...;

但是仍然不支持WHERE子句。

':username'=>$\u SESSION['username'],
':username'=>$username,
-同时确保
SESSION\u start()已加载。很有趣,@Fred ii-,你为什么认为这样行?我认为“demo”的第一个字母出现在查询中并非巧合。可能是某种unicode问题。你把
INSERT
语法和
UPDATE
语法混为一谈
updateplayers SET plusadd=:plusadd,takeaway=:takeaway。。。其中username=:username
我认为更新时必须使用set'plusadd'=:plusadd。这看起来更像是一个插入statement@thenashoneTBH,在我制定答案后,我注意到了迈克的评论。非常感谢,很遗憾我已经在这个问题上讨论了5个小时。lol@thenashone非常欢迎,很高兴它成功了,干杯“但仍然不支持WHERE子句。”-如果只支持
WHERE
子句,那将是自切片面包以来最棒的事情;)但在插入语中加入WHERE子句意味着什么呢?它是否会像REPLACE一样(但适用于非唯一列的条件)?非常好的问题清单。我得考虑一下。不幸的是,我刚刚出门。我会再打给你的。我一定会考虑一下。@Fred ii-,是的,当然在更新中哪里是有效的。但是VALUES子句不是更新的一部分。所以OP使用的语法很混乱。啊,好吧,我现在明白你的意思了,比尔,你完全正确。