MySQL更新语法错误

Sha*_*ane 0 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>";
    }
Run Code Online (Sandbox Code Playgroud)

$ order是年月和日值合并为一个整数值,例如12 apr 2013 = 20130412.

这是我收到的错误消息

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

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

Joh*_*Woo 5

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

UPDATE gigs SET `order` = '$order' WHERE gig_id = '$id'
Run Code Online (Sandbox Code Playgroud)

作为一个旁注,查询是脆弱的SQL Injection,如果值(小号变量)从外面走了进来.请查看下面的文章,了解如何防止它.通过使用,PreparedStatements您可以摆脱使用值周围的单引号.

  • 你把这些话从我嘴里说出来. (2认同)