mysql - C - MySQL API 准备好的语句
问题描述
我已经完全按照这个MySQL 手册进行了操作,并对其稍作更改以尝试制作一个将 4 个值插入表中的程序。表的结构是:
MariaDB [(none)]> desc analytics.live;
+--------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| dat_sent | int(11) | NO | | NULL | |
| machine_id | varchar(33) | YES | | NULL | |
| foreign_addr | varchar(50) | YES | | NULL | |
| con_state | varchar(50) | YES | | NULL | |
| count | int(11) | NO | | NULL | |
+--------------+-------------+------+-----+---------+-------+
我已经编译了它,并且可以成功写入数据库。但是我很难理解如何将参数传递到脚本中。
我的目标是拥有它,以便我可以从 cli 以时尚的方式将 4 个参数传递到脚本中:-
./a.out 0 "989b3gf047196h2243bd395a97cde4c" "192.168.0.1" "ESTABLISHED"
此刻,代码库在这里:https ://pastebin.com/npP1C8uz
我的问题是,我将如何使它接受每个 argv[] 作为 INSERT 的一部分?
解决方案
我只对字符串使用了一个数组,需要为每个字段使用一个数组(以及随附的计数)
得到它的工作:)
完成代码-
https://pastebin.com/WS1Qx050
我必须将每个字段绑定到它们自己的数据字符串。为此,我必须首先相应地定义每个字段:
MYSQL *mysql = mysql_init(NULL);
MYSQL_STMT *stmt;
MYSQL_BIND bind[4];
int param_count;
// short small_data;
int f1_data;
char f2_data[STRING_SIZE];
char f3_data[STRING_SIZE];
char f4_data[STRING_SIZE];
unsigned long f2_length;
unsigned long f3_length;
unsigned long f4_length;
然后,在进入 INSERT 阶段之前,我将每个绑定的 .buffer 属性声明为指向其各自数组的指针。
/* Bind data for all 4 parameters */
memset(bind, 0, sizeof(bind));
/* INTEGER PARAM */
bind[0].buffer_type= MYSQL_TYPE_LONG;
bind[0].buffer= (char *)&f1_data;
bind[0].is_null= 0;
bind[0].length= 0;
/* STRING PARAM */
bind[1].buffer_type= MYSQL_TYPE_STRING;
bind[1].buffer= (char *)f2_data;
bind[1].buffer_length= STRING_SIZE;
bind[1].is_null= 0;
bind[1].length= &f2_length;
/* STRING PARAM */
bind[2].buffer_type= MYSQL_TYPE_STRING;
bind[2].buffer= (char *)f3_data;
bind[2].buffer_length= STRING_SIZE;
bind[2].is_null= 0;
bind[2].length= &f3_length;
/* STRING PARAM */
bind[3].buffer_type= MYSQL_TYPE_STRING;
bind[3].buffer= (char *)f4_data;
bind[3].buffer_length= STRING_SIZE;
bind[3].is_null= 0;
bind[3].length= &f4_length;
这样做让我可以正确地将插入查询提交给 MySQL,在第 8 行定义的准备好的语句中填写所有的?
推荐阅读
- javascript - HTML CSS 如何使用 JavaScript 从 2D 表格制作动态多列表
- c# - 如何在没有偏移的文本文件中存储日期时间 +05:30
- python - 为什么opencv中resize的插值比PIL差?
- python - 当函数使用 lambda 参数时如何使用模拟
- php - Laravel Lumen 5.7,调试栏抛出调用成员函数监听 null
- regex - 在正则表达式中将单词添加到字符类
- python - 如果列元素是一个集合,如何从熊猫数据框列中获取每个值的计数?
- angular - 在客户端计算机上存储文件的最佳方式
- html - 使锚标记中的特定内容不重定向但可点击以用于 Javascript
- java - 检索与终端中显示的相同的 mongo 文档