char sql[1024]; sprintf_s(sql, "insert into savingsaccount(id,name,balance;) values(2020070002,'马晨哲', '0.55')"); if (mysql_query(con, sql)) { fprintf(stderr, "Failed to insert data:Error:%s\n", mysql_error(con)); return -1; }优化代码
时间: 2024-02-11 12:09:21 浏览: 123
绑定变量解决重编译问题-ORACLE_SQL
可以使用MySQL C API提供的预处理语句来优化这段代码,避免SQL注入攻击并提高执行效率。具体实现方法如下:
1. 定义预处理语句,使用占位符(?)代替具体的参数值。
```
MYSQL_STMT *stmt;
const char *sql = "insert into savingsaccount(id, name, balance) values (?, ?, ?)";
stmt = mysql_stmt_init(con);
mysql_stmt_prepare(stmt, sql, strlen(sql));
```
2. 绑定参数,设置参数类型和值。
```
MYSQL_BIND param[3];
memset(param, 0, sizeof(param));
int id = 2020070002;
char *name = "马晨哲";
double balance = 0.55;
param[0].buffer_type = MYSQL_TYPE_LONG;
param[0].buffer = &id;
param[1].buffer_type = MYSQL_TYPE_STRING;
param[1].buffer = name;
param[1].buffer_length = strlen(name);
param[2].buffer_type = MYSQL_TYPE_DOUBLE;
param[2].buffer = &balance;
mysql_stmt_bind_param(stmt, param);
```
3. 执行预处理语句,释放资源。
```
mysql_stmt_execute(stmt);
mysql_stmt_close(stmt);
```
这样可以避免手动构建SQL语句时出现的错误,提高代码的可读性和可维护性,并且可以有效防止SQL注入攻击。同时使用预处理语句还可以提高执行效率,因为预处理语句只需要编译一次,可以重复使用。
阅读全文