简体   繁体   中英

php count returning 1 not 0 from mysql_query when empty

I am trying to get a count and I am getting 1 instead of 0 from it. I have looked thoroughly though the web and this site. I have even been trying to figure it out on my own for a long time. I keep coming empty handed here.

So Basically what I am trying to do is make a like system for my users. I can get everything to work correctly the count works except for one thing. When they have liked it it returns 1 not 0 which it should be.

Here is my code for the count. I am not posting all the coding for security reasons and it really doesn't need to since its about the counting part not the rest.

$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);


}

So here is the code that determines the number. Any ideas what is wrong with this? Why its returning 1 not 0 when the item is empty?

Calling explode on an empty string gives an array containing the empty string. This is one element, not zero.

I would suggest that you change your database design if possible so that you don't store the values separated by commas. Use a separate table instead.

If you can't change the database design you can handle the empty string separately.

// 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);
    }
}

count() returns the number of indexes in an array or something in an object ( PHP: count - Manual ).

if a string var is used rather than an array or object it returns 1. it has to get a null value in order to return 0.

you can give it a go by trying:

print count("");

and

print count(null);

You'll have better luck if you use explode() to break the sql output into an array and then run a check with an if statement. Something like the following:

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

I hope this helps

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM