MySQL更新语法错误

时间:2013-04-12 17:48:20

标签: php mysql

我正在使用php在数据库上运行基本更新,但我收到了SQL语法错误,我不能在生活中看到错误。 db中的字段称为orders,它设置为int(8)。我尝试将其更改为smallint和varchar,但是增加但没有快乐。我也试过在查询中修改'和'。代码如下......

    $query = "UPDATE gigs SET order='$order' WHERE gig_id='$id'";
    if ($r = mysql_query($query) ) {
        echo  "<p>UPDATED:" . $row['year'] ." - " . $row['month'] . " - " .  $row['day'] . " = $order</p>";
    } else {
        echo "<p>" . mysql_error() . "<br />$q</p>";
    }

$ order是将年月和日值组合成一个整数值,例如2013年3月12日= 20130412。

这是我收到的错误消息

  

您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在第1行'order ='20040802'WHERE gig_id = '10''附近使用正确的语法   UPDATE gigs SET order ='20040802'WHERGIG_id ='10'

     

您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在第1行'order ='20040804'WHERE gig_id = '11''附近使用正确的语法   UPDATE gigs SET order ='20040804'WHERt gig_id = '11'

2 个答案:

答案 0 :(得分:5)

ORDER是保留关键字。为了使语句不抛出异常,您需要使用反引号转义列

UPDATE gigs SET `order` = '$order' WHERE gig_id = '$id'

作为旁注,如果变量的值( s )来自外部,则查询易受SQL Injection攻击。请查看下面的文章,了解如何防止它。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

答案 1 :(得分:1)

@EdHeal如果它是数字MySQL并不关心它是否被引用。如果我知道它是数字我不会引用它,但我已经多次创建动态查询,在这种情况下我只引用一切。当然,更好的选择是使用PDO和绑定参数;)