3.6.4 Обработка значений дат и времени с помощью подготовленных запросов
Бинарный (подготовленный запрос) протокол позволяет отправлять и получать значения дат и времени (, , , и ), используя структуру MYSQL_TIME. Члены этой структуры описаны в разделе 6.2 «C API Структуры данных подготовленных запросов».
Для отправки временных данных создайте подготовленный запрос, используя mysql_stmt_prepare(). Затем, перед вызовом mysql_stmt_execute() для выполнения запроса, выполните следующую процедуру для настройки каждого временного параметра:
В структуре
MYSQL_BIND, связанной со значением данных, установите членbuffer_typeв тип, указывающий, какой вид временного значения вы отправляете. Для значений , , , или установитеbuffer_typeсоответственно наMYSQL_TYPE_DATE,MYSQL_TYPE_TIME,MYSQL_TYPE_DATETIMEилиMYSQL_TYPE_TIMESTAMP.Установите член
bufferструктурыMYSQL_BINDв адрес структурыMYSQL_TIME, в которой вы передаёте временное значение.Заполните члены структуры
MYSQL_TIME, соответствующие типу передаваемого временного значения.
Используйте mysql_stmt_bind_param() для привязки данных параметра к запросу. Затем вы можете вызвать mysql_stmt_execute().
Для получения временных значений процедура аналогична, за исключением того, что вы устанавливаете член buffer_type в тип ожидаемого значения и член buffer в адрес структуры MYSQL_TIME, в которую должно быть помещено возвращаемое значение. Используйте mysql_stmt_bind_result() для привязки буферов к запросу после вызова mysql_stmt_execute() и перед извлечением результатов.
Вот простой пример вставки данных , , и . Переменная mysql предполагается, что представляет собой допустимый обработчик подключения.
MYSQL_TIME ts;
MYSQL_BIND bind[3];
MYSQL_STMT *stmt;
strmov(query, "INSERT INTO test_table(date_field, time_field, \
timestamp_field) VALUES(?,?,?");
stmt = mysql_stmt_init(mysql);
if (!stmt)
{
fprintf(stderr, " mysql_stmt_init(), out of memory\n");
exit(0);
}
if (mysql_stmt_prepare(mysql, query, strlen(query)))
{
fprintf(stderr, "\n mysql_stmt_prepare(), INSERT failed");
fprintf(stderr, "\n %s", mysql_stmt_error(stmt));
exit(0);
}
/* set up input buffers for all 3 parameters */
bind[0].buffer_type= MYSQL_TYPE_DATE;
bind[0].buffer= (char *)&ts;
bind[0].is_null= 0;
bind[0].length= 0;
...
bind[1]= bind[2]= bind[0];
...
mysql_stmt_bind_param(stmt, bind);
/* supply the data to be sent in the ts structure */
ts.year= 2002;
ts.month= 02;
ts.day= 03;
ts.hour= 10;
ts.minute= 45;
ts.second= 20;
mysql_stmt_execute(stmt);
..
© 2025 Oracle
Licensed under the GPLv2 License.