我正在創建一個函式以連接到 MYSQL 資料庫,并且我希望它保持打開狀態,以便以后可以呼叫函式 QuerySQL() 來獲取資料并處理它,但是,當我嘗試傳遞 SQL 連接的處理程式時,它停止作業。我認為它只是在本地函式中分配值,當它退出函式時,conn 的值會丟失,但我不知道如何修復它。
謝謝您的幫助。
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <ctype.h>
#include <stdbool.h>
#include <mysql.h>
//Declaracion de funciones
//Funcion para crear una conexion con el servidor SQL
void ConnectToSQL(char respuesta_sql[300],MYSQL *conn)
{
//parametros para inicializar la conexion
char *server = "localhost";//servidor
char *user = "root";//usuario
char *password = "mysql";//contrasena
char *database = "ProyectoSO";//base de datos que usremos
//Creamos una conexion al servidor MYSQL
conn = mysql_init(NULL);
if (conn==NULL) {
sprintf(respuesta_sql,"Error al crear la conexion: %u %s", mysql_errno(conn), mysql_error(conn));
}
/* Inicializar la base de datos */
conn = mysql_real_connect (conn, server,user, password, database,0, NULL, 0);
if (conn==NULL) {
sprintf (respuesta_sql,"Error al inicializar la conexion: %u %s", mysql_errno(conn), mysql_error(conn));
}
else
{
sprintf (respuesta_sql,"Exito");
}
}
//Funcion para desconectar de SQL
void DisconnectFromSQL(char respuesta_sql[300],MYSQL *conn)
{
MYSQL *ptr = conn;
mysql_close(conn);
sprintf(respuesta_sql,"Desconectado");
}
//Funcion para hacer consultas
int QuerySQL(char consulta[300], MYSQL *conn, MYSQL_ROW *row)
{
MYSQL_RES *resultado;
int err;
int resultado_consulta;
err = mysql_query(conn, consulta);
if (err!=0 && err!=1)
{
resultado_consulta = -1;//Error al consultar la base de datos
exit (1);
}
else if(err==0)
{
//recogemos el resultado de la consulta
if (resultado != NULL)
{
resultado = mysql_store_result(conn);
*row = mysql_fetch_row(resultado);
}
resultado_consulta=0;
}
return resultado_consulta;
}
int main(int argc, char *argv[])
{
MYSQL conn;//Se crea el conector
MYSQL *ptrconn = &conn;
char respuesta_sql[300];//Aqui se reciben los errores del servidor sql
ConnectToSQL(respuesta_sql,&conn);
printf("%s",respuesta_sql);
DisconnectFromSQL(respuesta_sql,&conn);
return 0;
}
uj5u.com熱心網友回復:
考慮在創建時回傳 MYSQL 物件而不是作為引數傳遞。這提供了一個指向物件的指標,呼叫者可以在使用之前測驗該物件是否成功,然后可以輕松地從一個函式傳遞到另一個函式,然后在不再需要時用于關閉連接。
示例原型和用法:
MYSQL * ConnectToSQL(char respuesta_sql[300])
{
...
MYSQL *conn = mysql_init(NULL);
...
return conn;
...
在main()
...
char respuesta_sql[300]={0};
char consulta[300]={0};
MYSQL_ROW row=0;
MYSQL *conn = ConnectToSQL(respuesta_sql);
if(conn)
{
//use conn
int ret = int QuerySQL(consulta, conn, &row);
...
DisconnectFromSQL(conn);
}
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/518131.html
標籤:mysqlC
下一篇:總銷售額的每日銷售額
