gpt4 book ai didi

Mysql,检查表和C中的行数

转载 作者:太空宇宙 更新时间:2023-11-04 02:15:18 25 4
gpt4 key购买 nike

我尝试创建函数来检查表是否存在并获取总行数,但我得到的结果是 1 而不是 99999。那么,我应该怎么做才能正常工作呢?

int sql_table_length(char* database, char* dtable, char* mysql_user_name, char* mysql_password)
{
int retval = 0;
MYSQL *conn;
conn = mysql_init(NULL);
if (conn)
{
if (mysql_real_connect(conn, "localhost", mysql_user_name, mysql_password, database, 0, NULL, 0)!=0)
{
char chktable[512] = {0};
sprintf(chktable,"%s%s%s", "SHOW TABLES LIKE '", dtable, "'");
mysql_query(conn, chktable);
if (mysql_store_result(conn))
{
MYSQL_RES *result;
char lngtable[512] = {0};
sprintf(lngtable, "%s%s", "SELECT COUNT(*) FROM ", dtable);
if (!(mysql_query(conn, lngtable)))
{
result = mysql_store_result(conn);
retval = mysql_num_rows(result); // here I get 1
mysql_free_result(result);
}
else retval = -4; //no rows
}
else retval = -3; //don't exist
}
else retval = -2; //can't connect
}
else retval = -1; //no connection
mysql_close(conn);
return retval;
}

谢谢!

最佳答案

您的查询 SELECT COUNT(*) FROM table 返回包含表中行数的一行。您不想计算结果中的行数,而是想查询返回的数字。

你会想要做类似的事情(未经测试):

MYSQL_STMT *stmt;
MYSQL_BIND bind;
long rows;
my_bool error; /* Omit at your own risk */

stmt = mysql_stmt_init(mysql)
mysql_stmt_prepare(stmt, lngtable, strlen(lngtable));
mysql_stmt_execute(stmt);

memset(&bind, 0, sizeof(bind));
bind.buffer_type = MYSQL_TYPE_LONG;
bind.buffer = (char *)&rows;
bind.error = &error; /* Omit at your own risk */

mysql_stmt_bind_result(stmt, &bind);

mysql_stmt_fetch(stmt);
printf("Number of rows: %ld\n", rows);

您应该为所有 mysql 调用添加错误检查。参见 http://dev.mysql.com/doc/refman/5.0/en/mysql-stmt-fetch.html有关绑定(bind)参数的更多示例。

或者,您可以将查询更改为类似SELECT * FROM table 的查询并保留其余代码,但这要求 MySQL 做更多的工作,结果可能需要更长。

关于Mysql,检查表和C中的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8548622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com