首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言SQL注入防範與參數化查詢實戰:預編譯語句、綁定參數、類型安全與性能提升

     編輯:關於C語言

SQL 注入風險示例

sprintf(sql, "SELECT * FROM users WHERE name='%s'", input);
// 輸入 ' OR '1'='1 導致繞過鑒權

參數化查詢原理

SQL 模板預編譯,參數佔位符 ?,執行時綁定數據,數據庫引擎將代碼與數據分離,徹底杜絕注入。

C 語言實現步驟

  1. 準備語句:stmt = Prepare(hConn, "SELECT * FROM users WHERE name=? AND age>?");
  2. 綁定參數:
    BindParam(stmt, 1, SQL_C_CHAR, name, strlen(name));
    BindParam(stmt, 2, SQL_C_LONG, &age, 0);
  3. 執行:Execute(stmt);
  4. 獲取結果:Fetch(stmt, ...) 逐行取數據。
  5. 釋放語句:FreeStmt(stmt);

優勢總結

  • 安全:數據從不拼接入 SQL 字符串,注入不可能。
  • 性能:同一模板重複執行只編譯一次,执行計劃復用。
  • 類型安全:綁定時指定 C 類型對應 SQL 類型,編譯期/運行期雙重檢查。
  • 可讀性:SQL 模板清晰,參數意圖明確。

常見 API 對應

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
操作ODBCMySQL C APIPostgreSQL libpq
預編譯SQLPreparemysql_stmt_preparePQprepare
綁定SQLBindParametermysql_stmt_bind_paramPQbindParam
執行SQLExecutemysql_stmt_executePQexecPrepared