在SQL中更新单行

时间:2014-11-13 18:31:06

标签: php mysql sql database sql-update

我在使用一个非常简单的SQL语句时遇到了问题:UPDATE

我只想更新特定行中的booking_date列。

以下是我使用的声明:

UPDATE `coupon-codes` SET `booking_id`=:timestamp WHERE `id` = :id

我使用PDO命名的占位符。

我总是得到错误的语法错误。我做错了什么?

编辑:

我试过没有反叛:

UPDATE coupon-codes SET booking_id = :timestamp WHERE id = :id

仍然无法工作。

这是我收到的错误消息:

enter image description here

编辑2:

以下是我在使用反引号时收到的错误消息: enter image description here

编辑3:

作为参考,这是我之前使用的INSERT语句,它没有任何问题:

INSERT INTO `coupon-codes` (`code`, `date`) VALUES (:code, :date)

编辑4:

抱歉,在评论中错误地说了一些事情,澄清一下,看到这个:

我到处都在使用BACKTICKS。这是不起作用的查询:

UPDATE `coupon-codes` SET `booking_date`=:timestamp WHERE `id` = :id

我在原始问题中也有一个拼写错误,其中包含booking_id而不是booking_date字段,但这并不重要,因为我收到了SYNTAX ERROR。

以下是我试图运行它的PHP代码:

$stmt = $db->prepare("UPDATE `coupon-codes` SET `booking_date`=:timestamp WHERE `id` = :id");
$stmt->bindParam(':timestamp', $time);
$stmt->bindParam(':id', $id);
$stmt->execute(); 

2 个答案:

答案 0 :(得分:0)

基本的MySQL语法:

'foo' - single-quotes. turns the quote word into a string literal
`foo` - backticks. used to escape table/fieldnames that happen to be reserved words


SELECT 'select' FROM ... -- select the literal word "select" from some table
SELECT `select` FROM ... -- select the field NAMED "select" from some table
SELECT select FROM ...   -- syntax error - using a reserved word "select"

鉴于您的错误消息,您可能有以下其中一项:

UPDATE 'coupon-code' ...   -- can't update a string. must specify a table name
UPDATE coupon-code ...  -- math operation: coupon MINUS code - not a table name

答案 1 :(得分:0)

您是否尝试过使用预定义常量(http://php.net/manual/en/pdo.constants.php);

示例:

$stmt = $db->prepare("UPDATE `coupon-codes` SET `booking_date`=:timestamp WHERE `id` = :id");
$stmt->bindParam(':timestamp', $time, PDO::PARAM_STR);
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
$stmt->execute();