2010-09-02 66 views
0

有一些小東西我一直在這裏失蹤,但我無法找到它爲我的生活。MySQL插入語法錯誤 - 無法找到它!

$insert = mysql_query("INSERT INTO USERS 
(`FBID`, `FIRST_NAME`, `LAST_NAME`, `GENDER`) 
VALUES ('$fbid', '$firstName', '$lastName', '$gender')"); 

的錯誤是:

Error: 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 '1' at line 1

任何想法?

+3

嘗試呼應的SQL字符串,看看你傳遞什麼到'mysql_query'。 – 2010-09-02 16:54:38

+0

那些應該是單引號(''')和d反引號(')在SQL語句中? – 2010-09-02 16:54:49

+0

有沒有一種方法可以記錄ACTUAL查詢?那就是變量被填充的那個?如果你還沒有逃過那些價值觀,你會遇到問題(如果其中一個變量包含單引號會怎麼樣?)。 – 2010-09-02 16:55:42

回答

0

是否有任何名字包含單引號?

嘗試寫出查詢的值以記錄/控制檯/調試,以確保它是你所期望的。

2

您沒有正確轉義的變量。使用mysql_real_escape_string和這樣的代碼:

$insert = mysql_query("INSERT INTO USERS (`FBID`, `FIRST_NAME`, `LAST_NAME`, `GENDER`) 
    VALUES (
      '".mysql_real_escape_string($fbid)."', 
      '".mysql_real_escape_string($firstName)."', 
      '".mysql_real_escape_string($lastName)."', 
      '".mysql_real_escape_string($gender)."' 
     )"); 

如果變量包含任何報價,他們創造的問題,如果你沒有正確地轉義。

+0

感謝您的建議。我已經嘗試了一切,但不斷收到錯誤。儘管查詢執行正確並且不是錯誤消息,但沒有問題。 – SteveMack 2010-09-02 17:24:41

+1

@Steve:如果你的查詢正確執行,數據被插入,但MySQL仍然抱怨語法錯誤,那麼語法錯誤必須在另一個查詢上。 – BoltClock 2010-09-02 17:55:14

0

嘗試在{}中包裝變量。

'{$fbid}', '{$firstName}', '{$lastName}', '{$gender}' 

否則,你將不得不使用字符串連接。 ' 「$ FBID」', ' 「$名字」',「」 ......

我假設你的變量已經包含了正確的轉義數據

+0

他正在構建一個雙引號字符串。變量可以很好地插入。你只需要大括號,如果你有一個變量可能與變量'$ x = 1; $ y =「$ x23」'不會給你'123',或者你需要訪問字符串中多維數組的額外級別。 '$ x [0] [1]'被解釋爲$ x [0]。 '[1]'。 – 2010-09-02 17:49:10

0

嘗試做這樣的:

$sql = <<EOL 
INSERT INTO USERS (`FBID`, `FIRST_NAME`, `LAST_NAME`, `GENDER`) 
VALUES ('$fbid', '$firstName', '$lastName', '$gender') 
EOL; 
$stmt = mysql_query($sql) or die("MySQL error: " . mysql_error()); 

這將保存查詢你$sql,所以你可以在其他地方呼應一下,看看有什麼實際製作。