10bet网址
MySQL 8.0 C API开发指南
本手册下载
PDF (Ltr)- 1.3 mb
PDF (A4)- 1.3 mb
HTML下载(TGZ)- 165.6 kb
HTML下载(邮政编码)- 176.1 kb


5.4.3 mysql_bind_param ()

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_xxx类型中列出表6.1,“MYSQL_BIND结构允许的输入数据类型”,除了MYSQL_TYPE_BLOBMYSQL_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]