c 向数据库添加数据
- 行业动态
- 2025-02-25
- 1
向数据库添加数据通常涉及使用SQL的
INSERT INTO
语句,指定表名、列和对应的值。
INSERT INTO table_name (column1, column2) VALUES (value1, value2);
C语言向数据库添加数据
在C语言中,向数据库添加数据通常需要借助数据库提供的API或库函数,以下是使用MySQL数据库的示例,展示了如何在C语言中连接数据库并向表中插入数据。
准备工作
确保你的系统上已经安装了MySQL数据库,并且创建了相应的数据库和表,创建一个名为test_db
的数据库和一个名为users
的表:
CREATE DATABASE test_db; USE test_db; CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), age INT );
安装MySQL开发库
在Ubuntu系统上,可以使用以下命令安装MySQL开发库:
sudo apt-get update sudo apt-get install libmysqlclient-dev
在Windows系统上,可以从MySQL官方网站下载并安装相应的开发库。
编写C代码
下面是一个使用C语言向MySQL数据库添加数据的示例代码:
#include <stdio.h> #include <stdlib.h> #include <mysql/mysql.h> void finish_with_error(MYSQL *con) { fprintf(stderr, "%s ", mysql_error(con)); mysql_close(con); exit(1); } int main() { MYSQL *con = mysql_init(NULL); if (con == NULL) { fprintf(stderr, "mysql_init() failed "); exit(1); } if (mysql_real_connect(con, "localhost", "root", "password", "test_db", 0, NULL, 0) == NULL) { finish_with_error(con); } if (mysql_query(con, "INSERT INTO users(name, age) VALUES('Alice', 30)")) { finish_with_error(con); } if (mysql_query(con, "INSERT INTO users(name, age) VALUES('Bob', 25)")) { finish_with_error(con); } mysql_close(con); printf("Data inserted successfully! "); return 0; }
编译和运行
将上述代码保存为insert_data.c
,然后使用以下命令编译和运行:
gcc insert_data.c -o insert_data $(mysql_config --cflags --libs) ./insert_data
如果一切正常,你将在终端中看到“Data inserted successfully!”的消息,并且可以在MySQL命令行工具中验证数据是否已成功插入:
USE test_db; SELECT * FROM users;
参数化查询(防止SQL注入)
为了提高安全性,建议使用参数化查询而不是直接拼接SQL字符串,以下是使用参数化查询的示例:
#include <stdio.h> #include <stdlib.h> #include <mysql/mysql.h> void finish_with_error(MYSQL *con) { fprintf(stderr, "%s ", mysql_error(con)); mysql_close(con); exit(1); } int main() { MYSQL *con = mysql_init(NULL); MYSQL_STMT *stmt; MYSQL_BIND bind[2]; char name[50] = "Charlie"; int age = 35; if (con == NULL) { fprintf(stderr, "mysql_init() failed "); exit(1); } if (mysql_real_connect(con, "localhost", "root", "password", "test_db", 0, NULL, 0) == NULL) { finish_with_error(con); } stmt = mysql_stmt_init(con); if (!stmt) { finish_with_error(con); } if (mysql_stmt_prepare(stmt, "INSERT INTO users(name, age) VALUES(?, ?)", -1)) { finish_with_error(con); } memset(bind, 0, sizeof(bind)); bind[0].buffer_type = MYSQL_TYPE_STRING; bind[0].buffer = name; bind[0].buffer_length = strlen(name); bind[1].buffer_type = MYSQL_TYPE_LONG; bind[1].buffer = &age; bind[1].is_null = 0; if (mysql_stmt_bind_param(stmt, bind)) { finish_with_error(con); } if (mysql_stmt_execute(stmt)) { finish_with_error(con); } mysql_stmt_close(stmt); mysql_close(con); printf("Data inserted successfully with parameterized query! "); return 0; }
编译和运行参数化查询代码
同样地,将上述代码保存为insert_data_param.c
,然后使用相同的命令进行编译和运行:
gcc insert_data_param.c -o insert_data_param $(mysql_config --cflags --libs) ./insert_data_param
FAQs
Q1: 如何修改数据库连接信息?
A1: 在mysql_real_connect
函数中修改主机名、用户名、密码和数据库名。
if (mysql_real_connect(con, "localhost", "your_username", "your_password", "your_database", 0, NULL, 0) == NULL) { finish_with_error(con); }
Q2: 如何处理插入失败的情况?
A2: 在插入数据后,检查mysql_query
或mysql_stmt_execute
的返回值,如果返回非零值,说明执行失败,可以调用mysql_error
获取错误信息并进行相应处理。
if (mysql_query(con, "INSERT INTO users(name, age) VALUES('Alice', 30)")) { fprintf(stderr, "Insert failed: %s ", mysql_error(con)); finish_with_error(con); }
小编有话说
通过上述示例,我们学习了如何在C语言中使用MySQL C API向数据库添加数据,无论是直接拼接SQL字符串还是使用参数化查询,都需要确保正确处理错误和异常情况,为了提高代码的安全性和可维护性,推荐使用参数化查询来防止SQL注入攻击,希望这些内容对你有所帮助,祝你编程愉快!