我在使用一个非常简单的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
仍然无法工作。
这是我收到的错误消息:
编辑2:
以下是我在使用反引号时收到的错误消息:
编辑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();
答案 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();