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_ типов, перечисленных в Таблице 6.1, «Допустимые типы входных данных для структур MYSQL_BIND», за исключением xxxMYSQL_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.