bool
mysql_bind_param(MYSQL *mysql,
                 unsigned n_params,
                 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- bind:由和- name参数 定义的属性数。
- bind:结构数组的地址- MYSQL_BIND。该数组应包含- n_params元素,每个元素对应一个属性。
- name: 字符指针数组的地址,每个指针指向一个定义属性名称的以 null 结尾的字符串。该数组应包含- n_params元素,每个元素对应一个属性。- character_set_client查询属性名称使用系统变量 指示的字符集进行传输 。
          每个属性都有名称、值和数据类型。name参数定义属性名称,参数
          bind定义它们的值和类型。MYSQL_BIND有关用于
          参数的数据结构成员的描述
          bind,请参阅
          第 6.2 节,“C API 准备语句数据结构”。
        
          每个属性类型大多数是
          表 6.1 “MYSQL_BIND 结构允许的输入数据类型”
          中列出
          的类型之一,除了和
          不受支持。如果为属性指定了不受支持的类型,
          
          则会发生错误。
        MYSQL_TYPE_xxxMYSQL_TYPE_BLOBMYSQL_TYPE_TEXTCR_UNSUPPORTED_PARAM_TYPE
- 
不支持属性数据类型。 
          此示例用于mysql_bind_param()定义字符串和整数查询属性,然后使用
          mysql_query_attribute_string()
          用户定义的函数按名称检索和显示它们的值:
        
MYSQL_BIND bind[2];
const char *name[2] = { "name1", "name2" };
char *char_data = "char value";
int int_data = 3;
unsigned long length[2] = { 10, sizeof(int) };
int status;
/* clear and initialize attribute butffers */
memset(bind, 0, sizeof (bind));
bind[0].buffer_type = MYSQL_TYPE_STRING;
bind[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);执行时,代码会产生以下结果:
attribute 1: [char value]
attribute 2: [3]