0

我正在使用 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 年 4 月 12 日 = 20130412。

这是我收到的错误消息

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

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

4

2 回答 2

5

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

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

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

于 2013-04-12T17:49:05.627 回答
1

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

于 2013-04-12T18:03:52.850 回答