看了mysql的官方文档,现在还是不大明白使用mysql_stmt_bind_result()绑定结果到bind数组,以及绑定后如何为bind.buffer预分配内存空间究竟是怎么一回事。官方给出的示例是这样的:
1 memset(bind, 0, sizeof(bind)); 2 3 /* INTEGER COLUMN */ 4 bind[0].buffer_type= MYSQL_TYPE_LONG; 5 bind[0].buffer= (char *)&int_data; 6 bind[0].is_null= &is_null[0]; 7 bind[0].length= &length[0]; 8 bind[0].error= &error[0]; 9 10 /* STRING COLUMN */ 11 bind[1].buffer_type= MYSQL_TYPE_STRING; 12 bind[1].buffer= (char *)str_data; 13 bind[1].buffer_length= STRING_SIZE; 14 bind[1].is_null= &is_null[1]; 15 bind[1].length= &length[1]; 16 bind[1].error= &error[1]; 17 18 /* SMALLINT COLUMN */ 19 bind[2].buffer_type= MYSQL_TYPE_SHORT; 20 bind[2].buffer= (char *)&small_data; 21 bind[2].is_null= &is_null[2]; 22 bind[2].length= &length[2]; 23 bind[2].error= &error[2]; 24 25 /* TIMESTAMP COLUMN */ 26 bind[3].buffer_type= MYSQL_TYPE_TIMESTAMP; 27 bind[3].buffer= (char *)&ts; 28 bind[3].is_null= &is_null[3]; 29 bind[3].length= &length[3]; 30 bind[3].error= &error[3]; 31 32 /* Bind the result buffers */ 33 if (mysql_stmt_bind_result(stmt, bind)) 34 { 35 fprintf(stderr, " mysql_stmt_bind_result() failed\n"); 36 fprintf(stderr, " %s\n", mysql_stmt_error(stmt)); 37 exit(0); 38 } 39 40 /* Now buffer all results to client (optional step) */ 41 if (mysql_stmt_store_result(stmt)) 42 { 43 fprintf(stderr, " mysql_stmt_store_result() failed\n"); 44 fprintf(stderr, " %s\n", mysql_stmt_error(stmt)); 45 exit(0); 46 }
希望有大牛能帮我解惑。