我正在使用C++为MySQL数据库编写一个程序。我试图通过比较列的长度(以字节为单位)与通过/失败来检查条件。代码如下:
while (row = mysql_fetch_row(result))
{
lengths = mysql_fetch_lengths(result);
num_rows = mysql_num_rows(result);
for (i = 0; i < num_fields; i++)
{
if (strstr(fields[i].name, "RSSI") != NULL)
{
if (lengths[*row[i]] == ??)
printf("current value is %s \t", row[i]);
}
}
}因此,基本上我要做的是在列中查找字符串"RSSI“,如果该字符串存在,我希望打印该值。每列中的值的长度为3个字节。那么如何检查length [*rowsi]的长度是否为3个字节呢?谢谢
发布于 2014-05-12 16:29:11
根据official MySQL documentation,mysql_fetch_lengths返回一个unsigned long数组,其中包含当前行的列的长度。虽然描述并不清楚它是以字节还是其他形式出现的,但下面的示例说明了这一点。
因此,您应该直接检查3。
此外,您的代码中还存在一些语法和语义错误,以及可能的重构,其中包括:
lengths变量是具有当前行长度的数组,则表达式lengths[*row[i]]应仅为lengths[i],因为i是当前列的索引。if>D13内的两个i合并到&&运算符。代码将如下所示:
// Properly assign a value to fields variable.
fields = mysq_fetch_fields(result);
// Getting the number of fields outside the loop is better.
num_fields = mysql_num_fields(result);
while (row = mysql_fetch_row(result))
{
lengths = mysql_fetch_lengths(row);
for (i = 0; i < num_fields; i++)
if (strstr(fields[i].name, "RSSI") != NULL && lengths[i] == 3)
printf("current value is %s \t", row[i]);
printf("\n"); // For better output print each row in a new line.
}你真的应该仔细阅读文档,以避免由于使用错误的函数而导致的编译或逻辑错误。
发布于 2015-01-30 23:40:14
我认为有一个打字错误:
开发人员文档状态:
(http://dev.mysql.com/doc/refman/5.0/en/mysql-fetch-lengths.html) ...
num_fields = mysql_num_fields(result);
lengths = mysql_fetch_lengths(result);
for(i = 0; i < num_fields; i++)不
lengths = mysql_fetch_lengths(row);https://stackoverflow.com/questions/23603876
复制相似问题