当空时,php count从mysql_query返回1而不是0

时间:2011-12-11 01:01:49

标签: php mysql

我正在尝试计算,我从中得到1而不是0。我通过网站和这个网站彻底查看。我甚至一直在试图自己解决这个问题很长一段时间。我一直空手而归。

所以基本上我要做的就是为我的用户制作一个类似的系统。除了一件事,我可以让一切正常工作。当他们喜欢它时,它返回1而不是0应该是。

这是我的计数代码。出于安全原因,我没有发布所有编码,因为关于计数部分而不是其余部分,所以我不需要。

$sql_like = mysql_query("SELECT * FROM posts WHERE mem2_id='$id' ORDER BY post_date DESC LIMIT 40");

while($row = mysql_fetch_array($sql_like)){

$like1 = $row['like_array'];
$like3 = explode(",", $like1);
    $likeCount = count($like3);


}

所以这是确定数字的代码。有什么想法吗?为什么当项目为空时它返回1而不是0?

3 个答案:

答案 0 :(得分:0)

在空字符串上调用explode会得到一个包含空字符串的数组。这是一个元素,而不是零。

我建议您尽可能更改数据库设计,以免存储以逗号分隔的值。改为使用单独的表格。

如果无法更改数据库设计,则可以单独处理空字符串。

答案 1 :(得分:0)

// you do escape your id right??? (sql injection prevention)
$sql_like = mysql_query("SELECT * FROM posts WHERE mem2_id='$id' ORDER BY post_date DESC LIMIT 40");

while($row = mysql_fetch_array($sql_like)){
    $likeCount = 0;
    $like1 = trim($row['like_array']);
    if ($like1) {
        $like3 = explode(",", $like1); // exploding emtpy string would result in array('')
        $likeCount = count($like3);
    }
}

答案 2 :(得分:0)

count()返回数组中的索引数或对象中的某些内容(PHP: count - Manual)。

如果使用字符串var而不是数组或对象,则返回1.它必须获取空值才能返回0.

你可以尝试一下:

print count("");

print count(null);

如果您使用explode()将sql输出分解为数组,然后使用if语句运行检查,那么您将获得更好的运气。如下所示:

$like3 = explode(',',$like1);
if (count($like1)=1 && $like1[0] == '')
        // etc ..

我希望这会有所帮助