使用 C++ 操作 MySQL 時,需將用戶輸入的變量(id、name、age 等)插入數據表。初學者常直接拼接 SQL 字符串,導致語法錯誤或安全隱患。
// 錯誤:直接在 SQL 中寫變量名,不會被解析
mysql_query(&myCont, "INSERT INTO `i` (`id`, `name`) VALUES (id, 'name')");
強烈建議使用 MYSQL_STMT 預處理語句,而非字符串拼接。這樣能自動處理轉義、防止 SQL 注入,且代碼更清晰。
INSERT INTO `i` (`id`, `name`, `age`, `subject`, `score`) VALUES (?, ?, ?, ?, ?)MYSQL_STMT,綁定參數(mysql_stmt_bind_param)。mysql_stmt_execute 執行。MYSQL_STMT *stmt = mysql_stmt_init(&myCont);
const char *query = "INSERT INTO `i` (`id`, `name`, `age`, `subject`, `score`) VALUES (?, ?, ?, ?, ?)";
mysql_stmt_prepare(stmt, query, strlen(query));
// 綁定參數
MYSQL_BIND bind[5];
memset(bind, 0, sizeof(bind));
// ... 為每個參數設置 buffer_type, buffer, is_null 等 ...
mysql_stmt_bind_param(stmt, bind);
for (int i = 1; i <= n; i++) {
// 獲取用戶輸入到 id, name, age, subject, score 變量
// 更新 bind 中的 buffer 指向這些變量
mysql_stmt_execute(stmt);
}
mysql_stmt_close(stmt);
mysql_real_escape_string),易出錯。掌握預處理語句是 C/C++ 數據庫開發的必備技能,請務必養成習慣。