好吧,我在這個瘋了。 MySQL對這一點SQL很感興趣:MySQL拒絕參數
INSERT INTO `test_table`
(`column1`, `column2`)
VALUES
(?COURSEID, ?COURSENAME)
您的SQL語法錯誤;在第1行檢查與您的MySQL服務器版本對應的正確語法對應的手冊。
我的調試代碼顯示了兩個填充的參數值。
好吧,我在這個瘋了。 MySQL對這一點SQL很感興趣:MySQL拒絕參數
INSERT INTO `test_table`
(`column1`, `column2`)
VALUES
(?COURSEID, ?COURSENAME)
您的SQL語法錯誤;在第1行檢查與您的MySQL服務器版本對應的正確語法對應的手冊。
我的調試代碼顯示了兩個填充的參數值。
MySQL不支持命名參數佔位符。您只能使用位置參數佔位符。也就是說,佔位符只是一個?
符號。
順便說一下,這符合ANSI SQL的行爲。像Oracle這樣的RDBMS支持命名參數作爲標準的擴展。
比爾,我相信你已經確定了這個問題。在過去,我使用MySQL的命名參數,但是我只使用.NET的MySQL驅動程序。在這種情況下,我使用的是ODBC驅動程序,我有一種感覺,它沒有處理與命名參數完全相同的東西。感謝高人一等的想法,我不知道命名參數不是SQL的正式組成部分。 – 2009-09-22 01:29:17
對,如果.NET驅動程序支持命名參數,它必須在將查詢字符串發送到MySQL服務器之前重寫查詢字符串。 PHP的PDO庫有類似的功能,所以即使它不支持命名參數,您也可以在任何後端使用命名參數。但很難獲得這種查詢重寫的權利,例如,字符串文字可能包含看起來像參數佔位符的字符,所以驅動程序中的查詢解析必須足夠聰明才能區分它們。 – 2009-09-22 01:35:19
不知道這是否可行。我會更改爲
VALUES
OR
VALUES(?,?)(:COURSEID,:COURSENAME)
:courseid是Oracle語法,不知道任何其他人 – 2009-09-22 01:08:40
這將有助於知道確切的SQL被執行,而不是那些佔位符值... – Charles 2009-09-22 00:53:13