WordPress.org

Ready to get started?Download WordPress

Forums

Can't Delete All in Akismet (15 posts)

  1. foiledagain
    Member
    Posted 5 years ago #

    Ever since I upgraded to 2.6.1, Akismet has been broken. Attempting to delete all gets me this:

    Warning: Invalid argument supplied for foreach() in public_html/wp/wp-content/plugins/akismet/akismet.php on line 731

    Warning: Cannot modify header information - headers already sent by (output started at public_html/wp/wp-content/plugins/akismet/akismet.php:731) in /home/patterico/public_html/wp/wp-includes/pluggable.php on line 770

    I checked the source code out. It reads like so:

    $moderation = $wpdb->get_results( "SELECT * FROM $wpdb->comments WHERE comment_approved = '0'", ARRAY_A );
            foreach ( $moderation as $c ) {

    I tried some database queries:

    mysql> select count(*) from wp_comments where comment_approved ='0';
    +----------+
    | count(*) |
    +----------+
    |        0 |
    +----------+
    1 row in set (0.00 sec)
    
    mysql> select count(*) from wp_comments where comment_approved =0;
    +----------+
    | count(*) |
    +----------+
    |      162 |
    +----------+
    1 row in set (0.19 sec)

    So I guess somehow WordPress is setting comment_approved to a numeric 0, but it should be a string, '0', according to Akismet?

  2. foiledagain
    Member
    Posted 5 years ago #

    A little more investigation—MySQL seems to think that 0 and '0' are the same value:

    mysql> select 0=0;
    +-----+
    | 0=0 |
    +-----+
    |   1 |
    +-----+
    1 row in set (0.00 sec)
    
    mysql> select 0='0';
    +-------+
    | 0='0' |
    +-------+
    |     1 |
    +-------+
    1 row in set (0.00 sec)
    
    mysql> select 0=1;
    +-----+
    | 0=1 |
    +-----+
    |   0 |
    +-----+
    1 row in set (0.00 sec)

    It also thinks that there are only three possible values for comment_approved: 0, 1, and spam.

    mysql> select distinct(comment_approved) from wp_comments;
    +------------------+
    | comment_approved |
    +------------------+
    | 0                |
    | 1                |
    | spam             |
    +------------------+
    3 rows in set (0.00 sec)

    How many do I have of each?

    mysql> select count(comment_approved), comment_approved from wp_comments group by comment_approved ;
    +-------------------------+------------------+
    | count(comment_approved) | comment_approved |
    +-------------------------+------------------+
    |                       1 | 0                |
    |                  179591 | 1                |
    |                     452 | spam             |
    +-------------------------+------------------+
    3 rows in set (0.41 sec)
    mysql> select count(*) from wp_comments where comment_approved = 'spam';
    +----------+
    | count(*) |
    +----------+
    |      452 |
    +----------+
    1 row in set (0.00 sec)
    mysql> select count(*) from wp_comments where comment_approved ='0';
    +----------+
    | count(*) |
    +----------+
    |        1 |
    +----------+
    1 row in set (0.02 sec)
    mysql> select count(*) from wp_comments where comment_approved = 0;
    +----------+
    | count(*) |
    +----------+
    |      453 |
    +----------+
    1 row in set (0.16 sec)

    I don't get it. Why is 0 equal to '0', and why does 'spam' also appear to be equal to 0?

  3. foiledagain
    Member
    Posted 5 years ago #

    According to mysql --version, I'm using mysql Ver 14.12 Distrib 5.0.22, for pc-linux-gnu (i486) using readline 5.1

  4. Trent Adams
    Member
    Posted 5 years ago #

    I get the same errors with the most recent release of akismet as well and reverted back to the previous version until there is a solution for this.

    Trent

  5. sunipeyk
    Member
    Posted 5 years ago #

    i had the same problem, i tryied many things at least...
    i earese it
    then
    upload the akismet comes with the wordpress 2.6.1
    and activate it , lala it works :)
    anyway
    new version 2.1.7 already relaesed :)

  6. sunipeyk
    Member
    Posted 5 years ago #

    and akismet 2.1.7 make same problem again.

  7. sunipeyk
    Member
    Posted 5 years ago #

    here is the solution=
    delete akismet and upload the akismet comes with the wordpress 2.6.1 in the content>plugin>
    use that one , it works :)

  8. RobAtSGH
    Member
    Posted 5 years ago #

    I don't get it. Why is 0 equal to '0', and why does 'spam' also appear to be equal to 0?

    Non-strict typing.

    When you compare 0 to '0', SQL first converts the numeric to its string equivalent. Since the string equivalent of the value 0 is '0', and '0' = '0', 0 thus equals '0'.

    When you compare 0 to 0, they are like types (numeric), and no type conversion is necessary.

    When you compare 'spam' to 0, SQL converts the string 'spam' to its numeric value - 0. Since 0 = 0, the statement is true.

    Thus, the only reliable way to compare values in a field with mixed string and numeric types is to always compare against the string literal, not the numeric values.

  9. jlandells
    Member
    Posted 5 years ago #

    HELP!

    I followed this thread and decided I needed to swap out my 2.1.7 Akismet for the one that comes with WP 2.6.1. So, I started by de-activating it, then deleting it from the server, then uploading the "correct" version. However, now I have no option to enable Akismet! :(

    I've checked the obvious - it's in the correct directory and seems to have the same properties as the other plugins!

    Any suggestions?

    Many thanks,
    -John.

  10. ande1352
    Member
    Posted 5 years ago #

    I wasn't able to delete all on the spam either - i had to downgrade to the previous version and then it started working again..

  11. Eric Martin
    Member
    Posted 5 years ago #

    Same issue here...haven't tried to fix it, perhaps an update will make it work?

  12. Andy Skelton
    Member
    Posted 5 years ago #

    The Delete All issue is unrelated to the value of zero.

    Ryan fixed it: http://plugins.trac.wordpress.org/changeset/62048/

    You just need to update your Akismet plugin to 2.1.8.

  13. foiledagain
    Member
    Posted 5 years ago #

    Thanks, andy!

  14. rajupp
    Member
    Posted 5 years ago #

    latest version is crap. anyway i can downgrade to previous version?
    edit: I have 2.1.7, i guess I need to upgrade.
    Somehow wordpress isnt showing I need to update it

  15. wfryer
    Member
    Posted 5 years ago #

    Thanks SO much for fixing this, I've had this problem for the past 5 days and the 2.1.8 version resolves it for me at last!

Topic Closed

This topic has been closed to new replies.

About this Topic

Tags