/*      bind_result(bind,...)        */
static VALUE stmt_bind_result(int argc, VALUE *argv, VALUE obj)
{
    struct mysql_stmt* s = DATA_PTR(obj);
    int i;
    MYSQL_FIELD *field;

    check_stmt_closed(obj);
    if (argc != s->result.n)
        rb_raise(eMysql, "bind_result: result value count(%d) != number of argument(%d)", s->result.n, argc);
    for (i = 0; i < argc; i++) {
        if (argv[i] == Qnil || argv[i] == rb_cNilClass) {
            field = mysql_fetch_fields(s->res);
            s->result.bind[i].buffer_type = field[i].type;
        }
        else if (argv[i] == rb_cString)
            s->result.bind[i].buffer_type = MYSQL_TYPE_STRING;
        else if (argv[i] == rb_cNumeric || argv[i] == rb_cInteger || argv[i] == rb_cFixnum)
            s->result.bind[i].buffer_type = MYSQL_TYPE_LONGLONG;
        else if (argv[i] == rb_cFloat)
            s->result.bind[i].buffer_type = MYSQL_TYPE_DOUBLE;
        else if (argv[i] == cMysqlTime)
            s->result.bind[i].buffer_type = MYSQL_TYPE_DATETIME;
        else
            rb_raise(rb_eTypeError, "unrecognized class: %s", RSTRING_PTR(rb_inspect(argv[i])));
        if (mysql_stmt_bind_result(s->stmt, s->result.bind))
            mysql_stmt_raise(s->stmt);
    }
    return obj;
}