Но что, если я хочу перевести содержимое строки [0] в строку или символ *?
Используйте mysql_fetch_lengths
, чтобы определить длину массива в MYSQL_ROW
. Поскольку в строке 1 или более столбцов, может быть 1 или более длин.
Согласно 27.8.5 C Структуры данных API Документация:
MYSQL_ROW
Это безопасное для типов представление одной строки данных. В настоящее время
реализован в виде массива подсчитанных байтовых строк. (Вы не можете лечить
это строки с нулевым символом в конце, если значения полей могут содержать двоичные
данные, потому что такие значения могут содержать нулевые байты внутри.) Строки
полученный по телефону mysql_fetch_row()
.
Затем документация mysql_fetch_row
приводит этот пример:
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");
}
Вот пример использования его для подсчета строк в таблице. Таблица была заполнена из нарушений FTC Do No Call .
MYSQL_RES* res = NULL;
MYSQL row;
const char SELECT_STMT[] = "SELECT COUNT(*) FROM blacklist_ftc";
if (mysql_query(mysql, SELECT_STMT) != 0)
{
/* handle error */
goto finish;
}
if ((res = mysql_store_result(s_mysql)) == NULL)
{
/* handle error */
goto finish;
}
if (mysql_num_fields(res) != 1 || mysql_num_rows(res) != 1)
{
/* handle error */
goto finish;
}
char buf[32];
unsigned long* length;
row = mysql_fetch_row(res);
length = mysql_fetch_lengths(res);
if (row == NULL || length == NULL)
{
/* handle error */
goto finish;
}
size_t size = length[0] < sizeof(buf)-1 ? length[0] : sizeof(buf)-1;
memcpy(buf, row[0], size);
buf[size] = '\0';
unsigned long count = (unsigned long)atoi(buf);
finish:
if (res)
{
mysql_free_result(res);
res = NULL;
}