PDO问题与UPDATE语句

时间:2014-09-26 17:23:18

标签: 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(
    ':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

2 个答案:

答案 0 :(得分:1)

可能想要进行INSERT,而不是UPDATE,所以我开始相信。

"INSERT into `players` (`plusadd`,`takeaway`,`dsum`,`msum`) ...

否则,如果您想进行更新,则需要使用SET

即:

"UPDATE `players` SET plusadd = :plusadd, takeaway=:takeaway, dsum=:dsum, msum= :msum...

如果您希望更新UPDATE。

否则,请使用INSERT INTO

  • 这就是您收到SQL错误的原因。

答案 1 :(得分:1)

您正在混淆INSERT与UPDATE的语法。

UPDATE是这样的:

UPDATE tablename SET column = value, column = value, ... 
WHERE condition;

INSERT是这样的:

INSERT INTO tablename (columns...) VALUES (values...);

Insert不支持WHERE子句,因为如果你要插入一个新行,那么该行自然不存在,所以用WHERE条件查找它是没有意义的。

MySQL支持INSERT的替代语法,使其看起来类似于UPDATE语句:

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

但仍然不支持WHERE子句。