gpt4 book ai didi

mysql - 如何验证数据库是否已设置

转载 作者:太空宇宙 更新时间:2023-11-04 08:55:17 29 4
gpt4 key购买 nike

我调用了 mysql_select_db(),它没有返回任何错误,但是当我调用 mysql_query() 时,我得到了以下错误:

No database selected.

我找到了一个MYSQL结构的参数。它是一些 char* 调用 db。它代表什么?mysql_select_db() 是否更改此参数?

谢谢。

编辑:

我的主要():

#include t-mysql.h
...
T_MYSQL *db = (T_MYSQL*) malloc(sizeof(T_MYSQL));

strcpy(db->database_name,mysql_database_name);
strcpy(db->password,mysql_password);
strcpy(db->root_password,mysql_root_password);
strcpy(db->server,mysql_server);
strcpy(db->table_name,mysql_table_name);
strcpy(db->user,mysql_user);
strcpy(db->query_create_db,query_create_db);
strcpy(db->query_create_table,query_create_table);

t_mysql_init(db);
t_mysql_connect(db);
t_mysql_createdb(db);
t_mysql_setdb(db);
t_mysql_createtable(db);
...

t-mysql.h:

#include <stdio.h>
#include <mysql.h>
#include <my_global.h>

#ifndef T_MYSQL_H_
#define T_MYSQL_H_

#define MAX_NAME_LENGTH 128
#define MAX_QUERY_LENGTH 1024

typedef struct {
MYSQL *con;
char password[MAX_NAME_LENGTH];
char root_password[MAX_NAME_LENGTH];
char user[MAX_NAME_LENGTH];
char server[MAX_NAME_LENGTH];
char database_name[MAX_NAME_LENGTH];
char table_name[MAX_NAME_LENGTH];
char query_create_table[MAX_QUERY_LENGTH];
char query_create_db[MAX_QUERY_LENGTH];
char query_data[MAX_QUERY_LENGTH];

}T_MYSQL;

void finish_with_error(MYSQL *con);
int t_mysql_init(T_MYSQL *mysql);
int t_mysql_connect(T_MYSQL *mysql);
int t_mysql_disconnect(T_MYSQL *mysql);
int t_mysql_createdb(T_MYSQL *mysql);
int t_mysql_createtable(T_MYSQL *mysql);
int t_mysql_setdb(T_MYSQL *mysql);
int t_mysql_insertdata(T_MYSQL *mysql);
int t_mysql_quickinsert(T_MYSQL *mysql);

#endif /* T_MYSQL_H_ */

t-mysql.c:

#include <stdio.h>
#include <mysql.h>
#include <my_global.h>
#include "t-mysql.h"


void finish_with_error(MYSQL *con){
fprintf(stderr, "%s\n", mysql_error(con));
mysql_close(con); //close connection to database
}

int t_mysql_init(T_MYSQL *mysql){

mysql->con = mysql_init(NULL);

if (mysql->con == NULL){
finish_with_error(mysql->con);
return 0;
}

return 1;
}


int t_mysql_connect(T_MYSQL *mysql){
// connect to MySQL
if (mysql_real_connect(mysql->con, mysql->server, mysql->user, mysql->password,NULL, 0, NULL, 0) == NULL){
finish_with_error(mysql->con);
return 0;
}
return 1;
}

int t_mysql_disconnect(T_MYSQL *mysql){
mysql_close(mysql->con);
if ( mysql->con == NULL){
finish_with_error(mysql->con);
return 0;
}
return 1;
}


int t_mysql_createdb(T_MYSQL *mysql){

t_mysql_disconnect(mysql); //disconnect normal user
//connect as root
t_mysql_init(mysql);
if (mysql_real_connect(mysql->con, mysql->server, "root", mysql->root_password,NULL, 0, NULL, 0) == NULL){
finish_with_error(mysql->con);
return 0;
}

// create DB, if it doesn't exist
if (mysql_select_db(mysql->con, mysql->database_name)){
if (mysql_query(mysql->con, mysql->query_create_db)){
finish_with_error(mysql->con);
return 0;
}
else {
fprintf(stdout,"Database %s created\n",mysql->database_name);
}
}else{
fprintf(stdout,"Database %s exists\n",mysql->database_name);
}

//disconnect root user
t_mysql_disconnect(mysql);
//connect as normal user
t_mysql_init(mysql);
t_mysql_connect(mysql);

return 1;
}

int t_mysql_setdb(T_MYSQL *mysql){

if (mysql_select_db(mysql->con, mysql->database_name) == NULL){
finish_with_error(mysql->con);
return 0;
}
return 1;
}

int t_mysql_createtable(T_MYSQL *mysql){
//create table:
if(mysql_query(mysql->con, mysql->query_create_table)){
finish_with_error(mysql->con);
return 0;
}
return 1;
}

int t_mysql_insertdata(T_MYSQL *mysql){
if (mysql_query(mysql->con, mysql->query_data)) {
finish_with_error(mysql->con);
return 0;
}
return 1;
}

最佳答案

我没有在我的系统上测试你的代码,但我想,错误在这里:

int t_mysql_setdb(T_MYSQL *mysql){

if (mysql_select_db(mysql->con, mysql->database_name) == NULL){//<-?
finish_with_error(mysql->con);
return 0;
}
return 1;
}

您在想,连接时出现错误时返回 0。虽然 MySQL 文档说,但事实恰恰相反:

int mysql_select_db(MYSQL *mysql, const char *db)

Return Values:
Zero for success. Nonzero if an error occurred.

http://dev.mysql.com/doc/refman/5.5/en/mysql-select-db.html

因此,您正在检查错误的值。这意味着,这个声明:

I called mysql_select_db() and it returned no errors

是假的,而且这个函数中一个你没有发现的错误。

关于mysql - 如何验证数据库是否已设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17456536/

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