我正在使用SQLite的C API,修改數據庫的唯一方法似乎是將SQL語句作爲字符串。例如,文檔顯示它只是通過exec
函數調用傳遞一個命令行字符串到發動機的代碼示例:以編程方式修改SQLite數據庫而不使用SQL
rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);
我不想成爲構建字符串並將它們傳遞給一個解釋,而不是最起碼是因爲安全問題,也是因爲我不想圍繞拼湊的字符串和轉義序列在一起。
是否有SQLite函數允許我直接操作數據庫而不用創建SQL字符串?
你總是要創建一個字符串來描述操作,但您可以使用「編譯」語句(當正確使用時)消除任何「SQL注入」的可能性並且便於指定可變參數。 – 2014-08-29 02:26:47
好吧,*不要*「圍繞拼湊字符串和轉義序列在一起」 - 這是佔位符/準備語句的用途。問題解決了。 – user2864740 2014-08-29 02:27:27
有*可能*是一種創建/調用SQLite使用的內部「程序/ DSL」的方法,但僅用於研究/學習/趣味目的,*不*用於避免此「問題」;描述這些操作是不實際的。使用DSL /樹到SQL(帶佔位符/綁定)庫/轉換可能更實際一些。我不確定C是什麼,但是其他語言中有很多例子,並且我創建了類似的高級SQL生成器。 – user2864740 2014-08-29 02:31:26