Spec-Zone.ru › MySQL Connectors 1.0

5.4.3 mysql_bind_param()

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: адрес массива указателей на символы, каждый из которых указывает на строку с нулевым окончанием, определяющую имя атрибута. Массив должен содержать n_params элементов, по одному для каждого атрибута. Имена атрибутов запроса передаются с использованием набора символов, указанного переменной системы.

Каждый атрибут имеет имя, значение и тип данных. Аргумент name определяет имена атрибутов, а аргумент bind определяет их значения и типы. Для описания членов структуры данных MYSQL_BIND, используемой для аргумента bind, см. Раздел 6.2, «Структуры данных C API подготовленных операторов».

Каждый тип атрибута должен быть одним из типов MYSQL_TYPE_xxx, перечисленных в Таблице 6.1, «Допустимые типы входных данных для структур MYSQL_BIND», за исключением того, что MYSQL_TYPE_BLOB и MYSQL_TYPE_TEXT не поддерживаются. Если для атрибута указан недопустимый тип, возникает ошибка.

Значения возврата

Ноль в случае успеха. Неноль, если произошла ошибка.

Ошибки

  • Тип данных атрибута не поддерживается.

Пример

В этом примере используется mysql_bind_param() для определения строковых и целочисленных атрибутов запроса, а затем извлекает и отображает их значения по имени с помощью пользовательской функции:

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]

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/c-api-8.0-en/mysql-bind-param.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API