WordPress.org

Ready to get started?Download WordPress

Forums

[resolved] WordPress 3.5: You have an error in your SQL syntax - wp-admin/edit-tag-form.php (10 posts)

  1. damsko
    Member
    Posted 1 year ago #

    Hi people,

    i upgraded about 2 days ago to WordPress 3.5 and all looks stable and is working. But monitoring the logs for errors i found this error today:

    [Sat Dec 15 01:08:22 2012] [error] [client xxx.xxx.xxx.xxx] WordPress database error You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') ORDER BY t.name ASC' at line 1 for query SELECT t.*, tt.* FROM WP_terms AS t INNER JOIN WP_term_taxonomy AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy IN ('category') AND ( t.term_id <> 159 ) AND t.term_id <> 33 ) ORDER BY t.name ASC made by include('wp-admin/edit-tag-form.php'), wp_dropdown_categories, get_terms, referer: /wp-admin/edit-tags.php?taxonomy=category&paged=2

    The only reference i could find to it is this bug report:
    http://core.trac.wordpress.org/ticket/19952

    I can repeat the error by editing one of my categories in the WP Admin area and updating it, that gives another error of this type in my logs, when i edit a tag there are no errors. The above error is first time i edited a categorie after the update from 3.4.2 to 3.5.

    Does anyone has a idea if this is related to the WordPress 3.5 update or if it could be related to my shared hosting? My hosting runs on Apache/2 MySQL 5.5.28 Community Server (GPL).

    Any ideas what could be causing it?

    Greetings damsko.

  2. linux4me2
    Member
    Posted 1 year ago #

    I just tested updating a category on one of my recently 3.4.2 -> 3.5 upgraded sites, and I didn't get any errors, so I would suspect it is something particular to your installation.

    The query looks like it's used to get a list of categories. Are your categories still listed on the Categories page after you click Update?

    It looks to me like you have a missing parenthesis in the statement, which should read like this:
    SELECT t.*, tt.* FROM WP_terms AS t INNER JOIN WP_term_taxonomy AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy IN ('category') AND (t.term_id <> 159) AND (t.term_id <> 33) ORDER BY t.name ASC
    with the "(" before "t.term_id <> 33."

    To see if I'm correct, you could try running the SQL statement in phpMyAdmin both in its original form and then with the added parenthesis.

    If that's the issue, the problem is finding where in the code that statement is generated and comparing your file to my working one to see if we can find the problem.

  3. damsko
    Member
    Posted 1 year ago #

    Thanks for the feedback linux4me2!

    Your observation that "t.term_id <> 33 )" should be "(
    t.term_id <> 33 )" looks spot on with identifying where it is going wrong.

    Here is the error code again that i got but then place between the "backticks" so that it doesn't get parsed, i forgot that first time:

    [Sat Dec 15 01:08:22 2012] [error] [client xxx.xxx.xxx.xxx] WordPress database error You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') ORDER BY t.name ASC' at line 1 for query SELECT t.*, tt.* FROM WP_terms AS t INNER JOIN WP_term_taxonomy AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy IN ('category') AND ( t.term_id <> 159 ) AND t.term_id <> 33 ) ORDER BY t.name ASC made by include('wp-admin/edit-tag-form.php'), wp_dropdown_categories, get_terms, referer: /wp-admin/edit-tags.php?taxonomy=category&paged=2

    Yes after i updated a category the WP Admin page refreshes and does lists all categories. The item i updated also shows with the changes made. That all seems to work.

    Will have a try with running the query in phpMyAdmin but SQL databases and the way how they function is something that i can not get my head around. I tried but i have some serious limitations there.

    Could this error indicate that the error is in a WordPress files making the query? That perhaps one of my WordPress files got damaged during upload? I always do that manually via FTP client. I then could re-upload the wp-admin and wp-include.

    Or could it be in the SQL software of my host?

  4. damsko
    Member
    Posted 1 year ago #

    OK i run the query and you indeed found the problem.

    The incomplete:

    SELECT t.*, tt.* FROM WP_terms AS t INNER JOIN WP_term_taxonomy AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy IN ('category') AND ( t.term_id <> 159 ) AND t.term_id <> 33 ) ORDER BY t.name ASC

    Returns no list only a error : (check the manual :-))

    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') ORDER BY t.name ASC LIMIT 0, 30' at line 1

    The complete query:

    SELECT t.*, tt.* FROM WP_terms AS t INNER JOIN WP_term_taxonomy AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy IN ('category') AND ( t.term_id <> 159 ) AND ( t.term_id <> 33 ) ORDER BY t.name ASC

    Works fine and returns a list.

    Is the error in a damaged WordPress file?

  5. linux4me2
    Member
    Posted 1 year ago #

    Yes, I guess it could be due to a damaged WordPress file or perhaps a plugin that isn't playing well with that section of the admin, though I would think a damaged file would cause more problems than this. Your test in phpMyAdmin pretty much rules out an issue with the server. You have proved that the SQL query itself had a syntax error in it, and we know that's coming from somewhere in WordPress.

    It looks like the error is pointing the finger at the functions wp_dropdown_categories, which is in wp-includes/category-template.php and get_terms, which is in wp-includes/taxonomy.php. I would download a fresh copy of WordPress and extract those two files, comparing them to the ones currently on the server to see if you can locate a difference.

    I use Meld to do that kind of comparison, but if you're not a Linux person you'd need to find a similar program for your OS. Of course, you could just upload them one at a time after temporarily renaming the old versions and test to see if you can figure out which it is. Fixing the problem is more important than finding the culprit, I guess.

    If that doesn't fix it, you could get out the bigger hammer like you said and do all of /wp-admin/includes and /wp-includes.

  6. damsko
    Member
    Posted 1 year ago #

    Thank you linux4me2! for helping me pinpoint the error to somewhere in the WordPress files and showing that my database itself is fine.

    You saved me work here, i just wanted to roll back to 3.4.2 from my backups but that is obliviously not where it went wrong. I'm going to use the big hammer now.

    Thanks for the tip Meld but since my switch from Windows 98SE i'm still on Windows XP.

    Will report back and marked solved if the big hammer worked or if perhaps still a plugin played a role. Next time i get something like this again i will first use the big hammer but my host just few day ago had some issues with their SQL server so when i got the message "WordPress database error" i feared that it got corrupted.

  7. linux4me2
    Member
    Posted 1 year ago #

    Yikes! Win XP! : )

    I'm really curious to see what you find out, so do post back and let me know. This is an intriguing problem (when it's not mine).

  8. damsko
    Member
    Posted 1 year ago #

    OK i found the culprit.

    After you showing that problem was with the WordPress part of my website i first started with the little hammer. I have a few minor hacks made to a handful WordPress files so i checked if something went wrong there. That was not the case. I took the big hammer and re-uploaded the wp-admin and wp-includes folders from a freshly downloaded WordPress 3.5. That did not solve it either. All plugins deactivated and a .htaccess with only the WordPress permalink redirect and the error kept occurring.

    I then turned to my personal functions.php and found the error.

    Few months ago i picked up some code on the web to exclude specified categories and tags by ID from WordPress menu's and widgets. It worked fine till the updated but it obviously has the mistake:

    function id_filter( $exclusions, $args ){
    
    	$exclude = "33,46,88";
    
    	$exterms = wp_parse_id_list( $exclude );
    	foreach ( $exterms as $exterm ) {
    			if ( empty($exclusions) )
    					$exclusions = ' AND ( t.term_id <> ' . intval($exterm) . ' ';
    			else
    					$exclusions .= ' AND t.term_id <> ' . intval($exterm) . ' ';
    	}
    
    	if ( !empty($exclusions) )
    		$exclusions .= ')';
    
    	return $exclusions;
    }
    
    add_filter( 'list_terms_exclusions', 'id_filter', 10, 2 );

    I edited the code to:

    function id_filter( $exclusions, $args ){
    
    	$exclude = "33,46,88";
    
    	$exterms = wp_parse_id_list( $exclude );
    	foreach ( $exterms as $exterm ) {
    			if ( empty($exclusions) )
    					$exclusions = ' AND ( t.term_id <> ' . intval($exterm) . ' ';
    			else
    					$exclusions .= ' AND t.term_id <> ' . intval($exterm) . ' ';
    	}
    
    	if ( !empty($exclusions) )
    		$exclusions .= ')';
    
    	return $exclusions;
    }
    
    add_filter( 'list_terms_exclusions', 'id_filter', 10, 2 );

    And now all works fine again. My categories and tags exluded by ID are 33,46,88. Obviously the else argument was not addressed in WordPress 3.4/3.4.2 but now in the WordPress 3.5 update it is. I think more people will be getting the same error.

    Thanks for helping me out linux4me2! Karma +1 ;-)

  9. damsko
    Member
    Posted 1 year ago #

    Oooooopsssss this is the fixed code:

    function id_filter( $exclusions, $args ){
    
    	$exclude = "33,46,88";
    
    	$exterms = wp_parse_id_list( $exclude );
    	foreach ( $exterms as $exterm ) {
    			if ( empty($exclusions) )
    					$exclusions = ' AND ( t.term_id <> ' . intval($exterm) . ' ';
    			else
    					$exclusions .= ' AND ( t.term_id <> ' . intval($exterm) . ' ';
    	}
    
    	if ( !empty($exclusions) )
    		$exclusions .= ')';
    
    	return $exclusions;
    }
    
    add_filter( 'list_terms_exclusions', 'id_filter', 10, 2 );

    Pasted the damaged one twice :-P

  10. linux4me2
    Member
    Posted 1 year ago #

    Nice job! Yes, I see the missing "(" in there.

Topic Closed

This topic has been closed to new replies.

About this Topic