我正在使用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'
答案 0 :(得分:5)
ORDER
是保留关键字。为了使语句不抛出异常,您需要使用反引号转义列
UPDATE gigs SET `order` = '$order' WHERE gig_id = '$id'
作为旁注,如果变量的值( s )来自外部,则查询易受SQL Injection
攻击。请查看下面的文章,了解如何防止它。通过使用PreparedStatements
,您可以摆脱在值周围使用单引号。
答案 1 :(得分:1)
@EdHeal如果它是数字MySQL并不关心它是否被引用。如果我知道它是数字我不会引用它,但我已经多次创建动态查询,在这种情况下我只引用一切。当然,更好的选择是使用PDO和绑定参数;)