1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <mysql/mysql.h>
#include "trans.h"
MYSQL mysql;
MYSQL_RES *result;
void
sql_connect()
{
if (!mysql_real_connect(&mysql,
sql_host, sql_user,
sql_password, sql_database, sql_port,
NULL, 0)) {
fprintf(stderr,
"cannot connect to MySQL server: %s\n",
mysql_error(&mysql));
exit(1);
}
}
void
sql_close()
{
mysql_close(&mysql);
}
int
va_sql_query(char *fmt, va_list ap)
{
char *buf = NULL;
int rc;
if (result) {
mysql_free_result(result);
result = NULL;
}
vasprintf(&buf, fmt, ap);
if (debug)
fprintf(stderr, "Executing query: %s\n", buf);
rc = mysql_query(&mysql, buf);
if (rc) {
fprintf(stderr, "MySQL Error: %s\n", mysql_error(&mysql));
if (!debug)
fprintf(stderr, "The failed query was: %s\n", buf);
} else {
result = mysql_store_result(&mysql);
if (result) {
if (debug)
fprintf(stderr, "Query returned %lu rows\n",
mysql_num_rows(result));
} else {
if (mysql_field_count(&mysql) == 0) {
/* query does not return data */
if (debug)
fprintf(stderr,
"Query affected %lu rows\n",
mysql_affected_rows(&mysql));
} else {
fprintf(stderr,
"MySQL Error: %s\n",
mysql_error(&mysql));
if (!debug)
fprintf(stderr,
"The failed query was: %s\n",
buf);
rc = 1;
}
}
}
free(buf);
return rc;
}
int
sql_query(char *fmt, ...)
{
va_list ap;
int rc;
va_start(ap, fmt);
rc = va_sql_query(fmt, ap);
va_end(ap);
return rc;
}
int
sql_query_n(unsigned long *pret, char *fmt, ...)
{
va_list ap;
int rc;
va_start(ap, fmt);
rc = va_sql_query(fmt, ap);
va_end(ap);
if (rc == 0) {
MYSQL_ROW row = mysql_fetch_row(result);
if (row)
*pret = strtoul (row[0], NULL, 0);
else
rc = 1;
}
return rc;
}
|