2009-09-22 65 views
1

好吧,我在這個瘋了。 MySQL對這一點SQL很感興趣:MySQL拒絕參數

INSERT INTO `test_table` 
    (`column1`, `column2`) 
VALUES 
    (?COURSEID, ?COURSENAME) 

您的SQL語法錯誤;在第1行檢查與您的MySQL服務器版本對應的正確語法對應的手冊。

我的調試代碼顯示了兩個填充的參數值。

+1

這將有助於知道確切的SQL被執行,而不是那些佔位符值... – Charles 2009-09-22 00:53:13

回答

2

MySQL不支持命名參數佔位符。您只能使用位置參數佔位符。也就是說,佔位符只是一個?符號。

順便說一下,這符合ANSI SQL的行爲。像Oracle這樣的RDBMS支持命名參數作爲標準的擴展。

+0

比爾,我相信你已經確定了這個問題。在過去,我使用MySQL的命名參數,但是我只使用.NET的MySQL驅動程序。在這種情況下,我使用的是ODBC驅動程序,我有一種感覺,它沒有處理與命名參數完全相同的東西。感謝高人一等的想法,我不知道命名參數不是SQL的正式組成部分。 – 2009-09-22 01:29:17

+0

對,如果.NET驅動程序支持命名參數,它必須在將查詢字符串發送到MySQL服務器之前重寫查詢字符串。 PHP的PDO庫有類似的功能,所以即使它不支持命名參數,您也可以在任何後端使用命名參數。但很難獲得這種查詢重寫的權利,例如,字符串文字可能包含看起來像參數佔位符的字符,所以驅動程序中的查詢解析必須足夠聰明才能區分它們。 – 2009-09-22 01:35:19

0

不知道這是否可行。我會更改爲

VALUES

OR

VALUES(?,?)(:COURSEID,:COURSENAME)

+0

:courseid是Oracle語法,不知道任何其他人 – 2009-09-22 01:08:40