WordPress.org

Forums

WP Db Abstraction
[resolved] doesnt work fully (6 posts)

  1. evanrich
    Member
    Posted 3 years ago #

    tried to set this up with SQL SERver 2008 r2 (standard) iis 7.5, and wordpress 3.3.2. While everything installed successfully, when i create posts, they do not show on the home page (says no content found). Also in the management dashboard, under posts, it says "4 posts" but "no posts found" as well, so it's almost as if it can't read posts back out of the database. If i use the post links, i can view them, just something in the way it pulls for the home page is not working.

    http://wordpress.org/extend/plugins/wordpress-database-abstraction/

  2. evanrich
    Member
    Posted 3 years ago #

    nevermind found the fix needed to remove two parenthesis on line 726 from translation.php

  3. AIGOit
    Member
    Posted 3 years ago #

    Got the same issue. Can you please publish the correct 726 line code?

  4. AIGOit
    Member
    Posted 3 years ago #

    Found.

    Just found another way to fix this issue.

    Because I found in 1.1.3, the same $limit_matches equations worked, so I read the changelog and I think is the line 726:

    $pattern = '/LIMIT\s*(\d+)((\s*,?\s*)(\d+)*)(;{0,1})$/is';

    should be changed back as 1.1.3:

    $pattern = '/LIMIT\s*(\d+)((\s*,?\s*)(\d+)*)$/is';

    Although it seems to fix the "limit regex to catch queries with ; at the end" issue, but will cause new issue here.

  5. erosenfield
    Member
    Posted 2 years ago #

    I experienced the same issue, and have resolved it.

    So I thought I would post to help others.

    I tracked the issue to the same place.

    The troublesome file is:

    /wp-content/mu-plugins/wp-db-abstraction/translations/sqlsrv/translations.php

    The problematic code is inside the function called "translate_limit"

    The issue seems to be the result of "count($limit_matches)."

    Querys against the user table seem to match five times, and queries against the post table seem to match six times.

    Bottom line:

    Below is my present solution.

    Simply replace the CONTENTS (not the outmost braces) of the "translate_limit" function with the code below.

    Hope this works for others.

    if ( (stripos($query,'SELECT') !== 0 && stripos($query,'SELECT') !== FALSE)
                && (stripos($query,'UPDATE') !== 0  && stripos($query,'UPDATE') !== FALSE) ) {
                return $query;
            }
            $pattern = '/LIMIT\s*(\d+)((\s*,?\s*)(\d+)*)(;{0,1})$/is';
            $matched = preg_match($pattern, $query, $limit_matches);
    
            if ( $matched == 0 ) {
                return $query;
            }
            // Remove the LIMIT statement
            $true_offset = false;
            $query = preg_replace($pattern, '', $query);
            if ( $this->delete_query ) {
                return $query;
            }
            // Check for true offset
    
    		// needed to add new code here:
    		// The pages showing posts need count($limit_matches) == 6
    		// The pages showing users need count($limit_matches) == 5
    		// so I will check if the query includes the name of the user table, and then respond accordingly
    
    		// check for user table
    		$userTablePos = strpos($query,"ASPPR_users");
    
    		if ($userTablePos == true)
    		{
    			// the query is addressing the user table
    
    			if ( count($limit_matches) == 5 && $limit_matches[1] != '0' ) {
    				$true_offset = true;
    			} elseif ( count($limit_matches) == 5 && $limit_matches[1] == '0' ) {
    				$limit_matches[1] = $limit_matches[4];
    			}
    		}
    		else
    		{
    			// the query is not addressing the user table
    
    			if ( count($limit_matches) == 6 && $limit_matches[1] != '0' ) {
    				$true_offset = true;
    			} elseif ( count($limit_matches) == 6 && $limit_matches[1] == '0' ) {
    				$limit_matches[1] = $limit_matches[4];
    			}
    		}
    
            // Rewrite the query.
            if ( $true_offset === false ) {
                if ( stripos($query, 'DISTINCT') > 0 ) {
                    $query = str_ireplace('DISTINCT', 'DISTINCT TOP ' . $limit_matches[1] . ' ', $query);
                } else {
                    $query = str_ireplace('DELETE ', 'DELETE TOP ' . $limit_matches[1] . ' ', $query);
                    $query = str_ireplace('SELECT ', 'SELECT TOP ' . $limit_matches[1] . ' ', $query);
                }
            } else {
                $limit_matches[1] = (int) $limit_matches[1];
                $limit_matches[4] = (int) $limit_matches[4];
    
                $this->limit = array(
                    'from' => $limit_matches[1],
                    'to' => $limit_matches[4]
                );
            }
            return $query;
  6. erosenfield
    Member
    Posted 2 years ago #

    NOOOOOO.... that code causes problems with session and login for some reason.... ugh.... back to drawing board... ignore my last post (but it might have been close)

Topic Closed

This topic has been closed to new replies.

About this Plugin

  • WP Db Abstraction
  • Frequently Asked Questions
  • Support Threads
  • Reviews

About this Topic