C語言是一種流行的編程語言,多用于系統編程和嵌入式開發。MySQL是一種開源的關系型數據庫管理系統,具有高度可靠性和性能。在C語言中使用MySQL實現數據庫操作往往需要用到查詢參數。
#include <mysql/mysql.h> #include <stdio.h> MYSQL *conn; // 數據庫連接 int main() { MYSQL_RES *res; // 結果集 MYSQL_ROW row; // 一行的結果 char *server = "localhost"; // 連接的數據庫服務器地址 char *user = "root"; // 數據庫用戶 char *password = "password"; // 數據庫密碼 char *database = "mydb"; // 數據庫名稱 // 連接數據庫 conn = mysql_init(NULL); if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) { fprintf(stderr, "%s\n", mysql_error(conn)); return 1; } // 執行查詢 char *query = "SELECT * FROM users WHERE id=1 AND age>18"; if (mysql_query(conn, query)) { fprintf(stderr, "%s\n", mysql_error(conn)); return 1; } // 獲取結果集 res = mysql_use_result(conn); // 輸出結果 while ((row = mysql_fetch_row(res)) != NULL) { printf("%s %s %s\n", row[0], row[1], row[2]); } // 釋放資源 mysql_free_result(res); mysql_close(conn); return 0; }
在上面的代碼中,我們使用了查詢參數“id=1 AND age>18”來篩選出滿足條件的數據。其中,id和age是數據庫中的列名。
需要注意的是,當查詢參數包含用戶輸入的內容時,需要使用預處理語句來防止SQL注入攻擊。例如:
char *query = "SELECT * FROM users WHERE id=? AND age>?"; MYSQL_STMT *stmt; // 預處理語句 MYSQL_BIND params[2]; // 綁定參數數組 int id = 1; int age = 18; ... stmt = mysql_stmt_init(conn); mysql_stmt_prepare(stmt, query, strlen(query)); params[0].buffer_type = MYSQL_TYPE_LONG; params[0].buffer = &id; params[1].buffer_type = MYSQL_TYPE_LONG; params[1].buffer = &age; mysql_stmt_bind_param(stmt, params); mysql_stmt_execute(stmt); ...
使用預處理語句可以保證參數的安全性,從而防止SQL注入攻擊。