MYSQL_BIND *bind, const char **name, MYSQL_BIND *bind, const char **name
mysql_bind_param ()
,在MySQL 8.0.23中可用,允许定义适用于发送到服务器的下一个查询的属性。有关查询属性的用途和使用的讨论,请参见查询属性。
属性定义了mysql_bind_param ()
应用于以阻塞方式执行的非准备语句mysql_real_query ()
或mysql_query ()
,或以非阻塞方式使用mysql_real_query_nonblocking ()
。属性不适用于使用该属性执行的准备语句mysql_stmt_execute ()
。
如果多个mysql_bind_param ()
调用发生在查询执行之前,只应用最后一个调用。
属性定义了mysql_bind_param ()
只应用于下一个执行的查询,之后将被清除。的mysql_reset_connection ()
和mysql_change_user ()
函数还会清除当前定义的任何属性。
mysql_bind_param ()
是向后兼容的。对于到不支持查询属性的旧服务器的连接,不发送任何属性。
参数:
mysql
返回的连接处理程序mysql_init ()
。n_params
属性定义的属性个数绑定
和的名字
参数。绑定
数组的地址MYSQL_BIND
结构。该数组应该包含n_params
元素,每个属性对应一个。的名字
:字符指针数组的地址,每个指针指向一个定义属性名的以空结束的字符串。该数组应该包含n_params
元素,每个属性对应一个。属性指定的字符集来传输查询属性名character_set_client
系统变量。
每个属性都有一个名称、一个值和一个数据类型。的的名字
参数定义属性名,而绑定
参数定义它们的值和类型。的成员的描述MYSQL_BIND
的数据结构绑定
论点,看到第6.2节,“C API准备好的语句数据结构”。
每个属性类型最多是其中之一MYSQL_TYPE_
类型中列出表6.1,“MYSQL_BIND结构允许的输入数据类型”,除了xxx
MYSQL_TYPE_BLOB
和MYSQL_TYPE_TEXT
不受支持。如果为某个属性指定了不支持的类型,则CR_UNSUPPORTED_PARAM_TYPE
发生错误。
属性数据类型不受支持。
这个示例使用mysql_bind_param ()
定义字符串和整数查询属性,然后使用mysql_query_attribute_string ()
用户定义函数:
MYSQL_BIND绑定[2];Const char *name[2] = {"name1", "name2"};Char *char_data = " Char值";Int int_data = 3;Unsigned long length[2] = {10, sizeof(int)};int状态;/*清除和初始化属性butffers */ memset(bind, 0, sizeof (bind));绑定[0]。buffer_type = MYSQL_TYPE_STRING;绑定[0]。buffer = char_data; bind[0].length = &length[0]; bind[0].is_null = 0; bind[1].buffer_type = MYSQL_TYPE_LONG; bind[1].buffer = (char *) &int_data; bind[1].length = &length[1]; bind[1].is_null = 0; /* bind attributes */ status = mysql_bind_param(&mysql, 2, bind, name); test_error(&mysql, status); const char *query = "SELECT mysql_query_attribute_string('name1')," " mysql_query_attribute_string('name2')"; status = mysql_real_query(&mysql, query, strlen(query)); test_error(&mysql, status); MYSQL_RES *result = mysql_store_result(&mysql); MYSQL_ROW row = mysql_fetch_row(result); unsigned long *lengths = mysql_fetch_lengths(result); for(int i = 0; i < 2; i++) { printf("attribute %d: [%.*s]\n", i+1, (int) lengths[i], row[i] ? row[i] : "NULL"); } mysql_free_result(result);
执行时,代码产生如下结果:
属性1:[char值]属性2:[3]