2011-04-30 88 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。考慮改用它。