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使用的语法很混乱。啊,好吧,我现在明白你的意思了,比尔,你完全正确。