mysql_query()只有语句不能被MySQL正确执行的时候才返回False

本文详细解析了MySQL中mysql_query()函数的使用方式及返回值特点,包括如何判断查询是否成功及是否有数据返回等关键操作。

如果mysql_query()能被mysql执行,就算没有查询到记录,也不返回false.

可以用mysql_num_rows()判断是否查询到记录.

这是手册上的解释:mysql_query() 仅对 SELECT,SHOW,EXPLAIN 或 DESCRIBE 语句返回一个资源标识符,如果查询执行不正确则返回 FALSE。对于其它类型的 SQL 语句,mysql_query() 在执行成功时返回 TRUE,出错时返回 FALSE。非 FALSE 的返回值意味着查询是合法的并能够被服务器执行。这并不说明任何有关影响到的或返回的行数。 很有可能一条查询执行成功了但并未影响到或并未返回任何行。

以下是 `mysql_query` 执行 `INSERT` 操作的完整流程: #### 1. 初始化 MySQL 连接 使用 `mysql_init` 函数初始化一个 `MYSQL` 对象,该对象用于后续的数据库连接和操作。 ```c #include <mysql/mysql.h> #include <stdio.h> int main() { MYSQL *conn; conn = mysql_init(NULL); if (conn == NULL) { fprintf(stderr, "mysql_init() failed\n"); return 1; } ``` #### 2. 建立数据库连接 使用 `mysql_real_connect` 函数连接到 MySQL 服务器,需要提供服务器地址、用户名、密码、数据库名等信息。 ```c if (mysql_real_connect(conn, "localhost", "user", "password", "database", 0, NULL, 0) == NULL) { fprintf(stderr, "mysql_real_connect() failed\n"); mysql_close(conn); return 1; } ``` #### 3. 准备 `INSERT` 语句 构造要执行的 `INSERT` SQL 语句,将数据插入到指定的表中。 ```c char insert_query[256]; snprintf(insert_query, sizeof(insert_query), "INSERT INTO your_table (column1, column2) VALUES ('value1', 'value2')"); ``` #### 4. 执行 `INSERT` 语句 使用 `mysql_query` 函数执行构造好的 `INSERT` 语句。对于没有数据返回结果集的 SQL ,如 `INSERT` ,在执行成功返回 `TRUE`,出错返回 `FALSE` [^3]。 ```c if (mysql_query(conn, insert_query)) { fprintf(stderr, "mysql_query() failed: %s\n", mysql_error(conn)); mysql_close(conn); return 1; } ``` #### 5. 检查受影响的行数 使用 `mysql_affected_rows` 函数检查 `INSERT` 操作影响的行数,以确认插入是否成功。 ```c unsigned long affected_rows = mysql_affected_rows(conn); printf("本次操作共有 %lu 条记录被插入!\n", affected_rows); ``` #### 6. 关闭数据库连接 使用 `mysql_close` 函数关闭与 MySQL 服务器的连接,释放资源。 ```c mysql_close(conn); return 0; } ``` ### 完整代码示例 ```c #include <mysql/mysql.h> #include <stdio.h> int main() { MYSQL *conn; conn = mysql_init(NULL); if (conn == NULL) { fprintf(stderr, "mysql_init() failed\n"); return 1; } if (mysql_real_connect(conn, "localhost", "user", "password", "database", 0, NULL, 0) == NULL) { fprintf(stderr, "mysql_real_connect() failed\n"); mysql_close(conn); return 1; } char insert_query[256]; snprintf(insert_query, sizeof(insert_query), "INSERT INTO your_table (column1, column2) VALUES ('value1', 'value2')"); if (mysql_query(conn, insert_query)) { fprintf(stderr, "mysql_query() failed: %s\n", mysql_error(conn)); mysql_close(conn); return 1; } unsigned long affected_rows = mysql_affected_rows(conn); printf("本次操作共有 %lu 条记录被插入!\n", affected_rows); mysql_close(conn); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值