Я использую MySQL C API для запроса базы данных, и у меня есть результаты, хранящиеся в типах MYSQL_ROW. Я могу распечатать результаты на консоли с помощью
printf("%s", row[0]);
однако, согласно документации MySQL C API, я не могу использовать их как строки с завершающим нулем.
Внизу обзор функций говорится, что я могу «извлечь» информацию с помощью mysql_store_result() или mysql_use_result(). Однако я все еще не понимаю, как это делается.
В идеале я хочу использовать результаты в виде строки, чтобы я мог делать такие вещи, как strcmp, но в противном случае мне определенно нужно как-то использовать информацию с этими двумя функциями.
Может кто-нибудь показать мне пример, как это сделать?






По сути, вы вызываете mysql_store_result () или mysql_use_result () для доступа к набору результатов, первый загружает все строки в память на стороне клиента, последний обращается к строкам по одной с сервера. Если вы используете mysql_use_result (), вам нужно вызвать mysql_fetch_row () для доступа к каждой строке, пока функция не вернет NULL. Каждый успешный вызов mysql_fetch_row () вернет MYSQL_ROW, который вы можете использовать для доступа к отдельным значениям полей.
Поскольку поля не завершаются нулем, вам нужно использовать mysql_fetch_lengths (), чтобы получить длину каждого из полей, чтобы вы могли скопировать их в другое место с помощью memcpy и т. д.
Поскольку значения полей не оканчиваются нулем, вам нужно будет добавить свой собственный символ NUL при создании копии, если вы хотите использовать его как строку. Имейте в виду, что значения полей могут содержать двоичные данные, поэтому, если вы обрабатываете их как строку, функции, ожидающие строку C, прекратят обработку данных, если они встретят в данных нулевой символ.
Вот пример из документации, который должен помочь вам собрать все это воедино:
MYSQL_ROW row;
unsigned int num_fields;
unsigned int i;
num_fields = mysql_num_fields(result);
while ((row = mysql_fetch_row(result)))
{
unsigned long *lengths;
lengths = mysql_fetch_lengths(result);
for(i = 0; i < num_fields; i++)
{
printf("[%.*s] ", (int) lengths[i],
row[i] ? row[i] : "NULL");
}
printf("\n");
}
mysql_fetch_lengths () возвращает размер каждого поля в определенной строке, он может быть разным для одного и того же столбца каждой строки.
Нет, вы не можете использовать strcmp (), потому что значение поля не будет завершаться нулем, вместо этого используется memcpy () или strncmp ().
Спасибо, поэтому я могу получить длину, но что, если мне нужно получить что-то, что хранится как varchar в базе данных? Означает ли это, что я не могу использовать strcmp с результатами?