2014-02-07 23 views
0

我试图在“places”列的特定行(ID)中更新MySQL数据库字段(将值减1),只要字段中的数字大于0更新字段MySQL语句中的错误

(见下面的实施例声明)

UPDATE table SET places = places - 1 WHERE id = $id AND places > 0 

下面的语句从字段的值改变到零失败开。 如果有人能帮助解决语法错误,我将不胜感激。

if($id){ 
    global $modx; 
    $table = "`database_name`.`table_name`"; 
    $update_seats = "`places` - 1"; 
    $result = $modx->db->update('`places` = "' . $update_seats . '"', $table, '`id` = "' . $id . '" AND `places` > 0'); 
    return $result;   // Returns 'true' on success, 'false' on failure. 
    } 
+0

也许如果你检查了一个错误信息并告诉我们它是什么或者看着你的mysql查询日志来看看实际发送到服务器的是什么,那么它可能会更容易帮助你 - 你甚至可以自己解决问题。 (看代码,我认为这种方法调用不太可能产生像这样的SQL) – symcbean

回答

1

你已经在双引号

$result = $modx->db->update('`places` = "' . $update_seats . '"', $table, '`id` = "' . $id . '" AND `places` > 0'); 

什么被评价为在MySQL查询字符串封闭的领域的新的价值。删除这里的双引号

'`places` = "' . $update_seats . '"' 

,使它看起来像这样

$result = $modx->db->update('`places` = ' . $update_seats, $table, '`id` = "' . $id . '" AND `places` > 0'); 
+0

谢谢你的出色答复。上面的解决方案工作。 – Twobears

+0

我很高兴能帮上忙 – ivankoni

0

查询看起来不错,如果你需要的1最小值设置为places你应该简单地更改相应的查询:

UPDATE table SET places = places - 1 WHERE id = $id AND places > 1