我有一些奇怪的感覺,我想向你揭示sqlite3 參數。我可以在sqlite3中使用表名參數嗎?
這是我的查詢和故障消息:
#query
'SELECT id FROM ? WHERE key = ? AND (userid = '0' OR userid = ?) ORDER BY userid DESC LIMIT 1;'
#error message, fails when calling sqlite3_prepare()
error: 'near "?": syntax error'
在我的代碼,它看起來像:
// Query is a helper class, at creation it does an sqlite3_preprare()
Query q("SELECT id FROM ? WHERE key = ? AND (userid = 0 OR userid = ?) ORDER BY userid DESC LIMIT 1;");
// bind arguments
q.bindString(1, _db_name.c_str()); // class member, the table name
q.bindString(2, key.c_str()); // function argument (std::string)
q.bindInt (3, currentID); // function argument (int)
q.execute();
我有,我不能對使用SQLite 參數的感覺表名稱,但我無法在Sqlite3 C API中找到確認。
你知道我的查詢有什麼問題嗎?
我是否必須預先處理我的SQL語句以在之前包括表名準備查詢?
不,你不能用SQLite或其他大多數SQL產品來做到這一點。參數綁定用於綁定參數,而不是替換您喜歡的任何舊查詢位。 – 2011-05-03 13:37:57
嗯,這就是我所懷疑的,但是SQLite API沒有告訴它,你知道我可以在哪裏得到*確認嗎?另外,我不同意參數不能是SQL語句的*變量*之一。 'INSERT','UPDATE','WHERE'是靜態的,來自SQL語言的固定詞法分析器,但表名不是,恕我直言。 – Gui13 2011-05-03 13:40:54
這裏http://www.sqlite.org/c3ref/bind_blob.htm,例如「文字可能被參數替換」。 SQL語法中的文字就像字符串和數字一樣。表名不是文字。 – 2011-05-03 13:44:31