-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmysqlc.c
157 lines (115 loc) · 4.81 KB
/
mysqlc.c
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/* mysqlc.c
//
// Коннектор к MySql
// Author: Mike Lapshov
// Copyright (C) 2011-2016 Mike Lapshov
*/
#include <string.h>
#include <stdlib.h>
#include <mysql.h>
#include <getopt.h>
#include "include/main.h"
int connectDb(MYSQL *conn, char *server, char *user, char *password, char *database){
if(!mysql_real_connect(conn, server,
user, password, database, 0, NULL, 0))
return 0;
return 1;
}
int getVersionDb(MYSQL *conn, char *ver){
int sql_error = 0;
if(mysql_query(conn, "SELECT VERSION()") != 0){}
sql_error = 1;
//perror("Error: can't execute SQL-query\n");
// Получаем дескриптор результирующей таблицы
MYSQL_RES *res = mysql_store_result(conn);
if(res == NULL){
sql_error = 1;
//perror("Error: can't get the result description\n");
}
// Получаем первую строку из результирующей таблицы
MYSQL_ROW row = mysql_fetch_row(res);
if(mysql_errno(conn) > 0)
sql_error = 1;
//perror("Error: can't fetch result\n");
strcpy(ver, row[0]);
// Освобождаем память, занятую результирующей таблицей
mysql_free_result(res);
return sql_error;
}
int writeThemp(MYSQL *conn, struct ds18b20 *d){
MYSQL_STMT *sql_statement1;
MYSQL_BIND sql_bind_parameters1[2];
int sql_error = 0;
//Setup to create query
sql_statement1= mysql_stmt_init(conn);
if (!sql_statement1)
sql_error = 1;
//----- SET THE QUERY TEXT -----
#define SQL_QUERY_TEXT_1 "INSERT INTO `smarthome`.`sensor_data` (`date`, `dev_id`, `value`) VALUES (NOW(), ?, ?);"
if (mysql_stmt_prepare(sql_statement1, SQL_QUERY_TEXT_1, strlen(SQL_QUERY_TEXT_1)))
sql_error = 1;
//----- SET THE QUERY PARAMETER VALUES -----
//If you want to know how many parameters are expected
//int param_count = mysql_stmt_param_count(sql_statement1);
//Set the parameter values
memset(sql_bind_parameters1, 0, sizeof(sql_bind_parameters1)); //Reset the parameters memory to null
//Integer
//int int_data = 10;
//sql_bind_parameters1[0].buffer_type = MYSQL_TYPE_LONG;
//sql_bind_parameters1[0].buffer = (char*)&d->DevId; //<Note: this is a pointer!
//sql_bind_parameters1[0].is_null = 0;
//sql_bind_parameters1[0].length = 0;
unsigned long str_length = strlen(d->devID);
sql_bind_parameters1[0].buffer_type = MYSQL_TYPE_STRING;
sql_bind_parameters1[0].buffer = (char*)&d->devID; //<Note: this is a pointer!
sql_bind_parameters1[0].buffer_length = sizeof(&d->devID);
sql_bind_parameters1[0].is_null = 0;
sql_bind_parameters1[0].length = &str_length;
double tempC = strtod(d->tempData, NULL);
tempC /= 1000;
sql_bind_parameters1[1].buffer_type = MYSQL_TYPE_DOUBLE;
sql_bind_parameters1[1].buffer = (char*)&tempC; //<Note: this is a pointer!
sql_bind_parameters1[1].is_null = 0;
sql_bind_parameters1[1].length = 0;
/*
//string
char str_data[50] = "Hello";
unsigned long str_length = strlen(str_data);
sql_bind_parameters1[1].buffer_type = MYSQL_TYPE_STRING;
sql_bind_parameters1[1].buffer = (char*)str_data;
sql_bind_parameters1[1].buffer_length = sizeof(str_data);
sql_bind_parameters1[1].is_null = 0;
sql_bind_parameters1[1].length = &str_length; //<Note: this is a pointer!
//smallint
short small_data;
my_bool is_null = 1; //We'll store this as null in this example
sql_bind_parameters1[2].buffer_type = MYSQL_TYPE_SHORT;
sql_bind_parameters1[2].buffer = (char*)&small_data; //<Note: this is a pointer!
sql_bind_parameters1[2].is_null = &is_null; //<Note: this is a pointer!
sql_bind_parameters1[2].length = 0;
*/
//Pointers are used in the bind parameters so that if you are say adding multiple rows you can use the same query setup with new values for each execute of it.
//Bind the buffers
if (mysql_stmt_bind_param(sql_statement1, sql_bind_parameters1))
sql_error = 1;
//----- EXECUTE THE QUERY ------
if (!sql_error){
if (mysql_stmt_execute(sql_statement1))
sql_error = 1;
}
//If you want to get the number of affected rows
//my_ulonglong affected_rows = mysql_stmt_affected_rows(sql_statement1);
//if (affected_rows != 1)
//{
// do something
//}
//IF YOU WANT TO GET THE VALUE GENERATED FOR AN AUTO_INCREMENT COLUMN IN THE PREVIOUS INSERT/UPDATE STATEMENT
//my_ulonglong sql_insert_id = mysql_stmt_insert_id(sql_statement1);
//If you want to do the query again then change any values you want to change and call mysql_stmt_execute(sql_statement1) again
//Close the statement
if (sql_statement1){
if (mysql_stmt_close(sql_statement1))
sql_error = 1;
}
return sql_error;
}