我正在使用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个字节。那么如何检查长度[* rows [i]]的长度是否为3个字节?感谢
答案 0 :(得分:4)
根据official MySQL documentation mysql_fetch_lengths
返回一个unsigned long
数组,其长度为当前行的列数。虽然描述不清楚它是以字节还是其他形式,但显示的例子澄清了它。
所以你应该直接检查3
。
此外,还有一些语法和语义错误,以及代码中可能的重构,其中包括以下内容:
lengths
变量是一个包含当前行长度的数组,表达式lengths[*row[i]]
应该只是lengths[i]
,因为i
是当前列的索引。 if
内的两个for
可以与&&
运算符合并,以提高可读性。代码如下所示:
// 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.
}
您应该仔细阅读文档,以避免使用错误函数的编译或逻辑错误。
答案 1 :(得分:0)
我认为有一个错字:
dev docs说:
(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);