2011-04-30 64 views
1

我试图运行此查询:通过我的PHP脚本疑难解答PHP MySQL查询

$q1 = "INSERT INTO `Validation` (`Key`, `Status`, `Notes`, `Serial`) VALUES (max(Key)+1, 'Valid', '".mysql_real_escape_string($user)."', '0')"; 

,但是每次都显示此错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Key)+1, 'Valid', 'USER', '0')' at line 1 

任何想法?

+5

您是否试图模拟自动增加的ID?在这种情况下,你可以在列上使用AUTO_INCREMENT,它会为你做到这一点。 – robbrit 2011-04-30 18:56:51

回答

2

我不确定你可以在那里使用Key。其中一种方法是在INSERT之前执行SELECT语句以查找max(Key)值。另一种(更可取的)方法是使数据库自动增加KEY列

+0

我试图将自动增量添加到列中,但是Ikeep出现此错误:#1063 - 列'Key'的列说明符错误 – 2011-04-30 19:08:40

+0

Key的列类型是什么?它应该是(TINYINT,SMALLINT,INTEGER或BIGINT)之一,用于自动递增工作 – 2011-04-30 19:11:25

0

尝试使用子查询。

$q1 = "INSERT INTO `Validation` (`Key`, `Status`, `Notes`, `Serial`) VALUES ((SELECT max(Key) FROM Validation)+1, 'Valid', '".mysql_real_escape_string($user)."', '0')"; 
4

KEYMySQL reserved word,所以如果你选择了它作为列名,你必须报价它(与反引号)时间:

$q1 = "INSERT INTO `Validation` (`Key`, `Status`, `Notes`, `Serial`) 
    VALUES (
     max(`Key`) + 1, 
     'Valid', 
     '".mysql_real_escape_string($user)."' 
     , '0' 
    )"; 

请注意,你不't 引用带反引号的非保留字。

我真的不确定这会起作用吗 - MySQL不禁止从同一张表中读取您在单个查询中更新的表吗?无论如何,正如评论中提到的那样,它看起来就像是自动为您手动复制what AUTO_INCREMENT does。考虑改用它。