2012-02-09 5 views
0

Je reçois une erreur de pagination dans mon script PHP. La requête fonctionne correctement lorsqu'elle est exécutée directement dans mysql workbench et revient avec les bons résultats.La requête de pagination PHP a échoué

Erreur retournée: Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de « LIMIT 0, 20 » à la ligne 2

$getpositive = "select case_number, c.name as subject, a.name, u.first_name, u.last_name from cases as c join cases_cstm as cc on c.id = cc.id_c 
       left join accounts as a on a.id = c.account_id left join users as u on u.id = c.assigned_user_id where rating_c ='1';"; 
$db -> PS_Pagination($getpositive, 20, 5, ""); 
$db -> setDebug(true); 
$rs = $db->paginate(); 
$positive_rating_rows = mysql_num_rows($rs); 

Je puis afficher les résultats dans un tableau:

while($val = mysql_fetch_assoc($rs)) 
     {   

     ?> 
       </tr> 
       <tr> 
        <td width="7%"><?=$val['case_number']?></td> 
        <td width="40%"><?=$val['subject']?></td> 
        <td width="40%"><?=$val['name']?></td> 
       </tr> 

Voici ma fonction pagination:

public function PS_Pagination($sql, $rows_per_page = 10, $links_per_page = 5, $append = "") { 
    //$this->conn = $connection; 
    $this->sql = $sql; 
    $this->rows_per_page = (int)$rows_per_page; 
    if (intval($links_per_page) > 0) { 
     $this->links_per_page = (int)$links_per_page; 
    } else { 
     $this->links_per_page = 5; 
    } 
    $this->append = $append; 
    $this->php_self = htmlspecialchars($_SERVER['PHP_SELF']); 
    if (isset($_GET['page'])) { 
     $this->page = intval($_GET['page']); 
    } 
} 

public function paginate() { 
    //Check for valid mysql connection 
    if (! $this->IsConnected()) { 
     $this->SetError("No connection"); 
     return false; 
    } 

    //Find total number of rows 
    $all_rs = @mysql_query($this->sql); 
    if (! $all_rs) { 
     if ($this->debug) 
      echo "SQL query failed. Check your query.<br /><br />Error Returned: " . mysql_error(); 
     return false; 
    } 
    $this->total_rows = mysql_num_rows($all_rs); 
    @mysql_close($all_rs); 

    //Return FALSE if no rows found 
    if ($this->total_rows == 0) { 
     if ($this->debug) 
      //echo "Query returned zero rows."; 
     return FALSE; 
    } 

    //Max number of pages 
    $this->max_pages = ceil($this->total_rows/$this->rows_per_page); 
    if ($this->links_per_page > $this->max_pages) { 
     $this->links_per_page = $this->max_pages; 
    } 

    //Check the page value just in case someone is trying to input an aribitrary value 
    if ($this->page > $this->max_pages || $this->page <= 0) { 
     $this->page = 1; 
    } 

    //Calculate Offset 
    $this->offset = $this->rows_per_page * ($this->page - 1); 

    //Fetch the required result set 
    //echo $this->sql . " LIMIT {$this->offset}, {$this->rows_per_page}"; 
    $rs = @mysql_query($this->sql . " LIMIT {$this->offset}, {$this->rows_per_page}"); 
    if (! $rs) { 
     if ($this->debug) 
      echo "Pagination query failed. Check your query.<br /><br />Error Returned: " . mysql_error(); 
     return false; 
    } 
    return $rs; 
} 
+1

La publication du message d'erreur pourrait vous aider ... un extrait de votre classe $ db (et plus particulièrement les fonctions PS_Pagination et paginate) vous serait utile. – Oldskool

+0

J'ai ajouté l'erreur. Je ne suis pas sûr d'où sont situées les fonctions de pagination. – ipengineer

+0

Apparemment l'une des fonctions est de modifier votre requête (au moins en ajoutant le bit 'LIMIT 0, 20'), il serait donc essentiel de voir la fonction responsable de cela. Sinon, nous ne pouvons pas trouver de solution. – Oldskool

Répondre

1

vous avez un ; à la fin de votre requête, et vous êtes alors essayez d'ajouter LIMIT 0,20 à la fin. Donc, il ressemble à ceci: blah blah blah where something=value; LIMIT 0,20. Cela ne marchera pas. Supprimez le ; pour corriger.

Note secondaire, la syntaxe SQL_CALC_FOUND_ROWS vous intéressera peut-être, car elle optimisera grandement votre méthode de pagination.

+0

Merci! Je savais que ça finirait par être quelque chose de goofy .. – ipengineer

1

Votre instruction SQL a un point-virgule à la fin. Je devine que la méthode PS_Pagination ajoute juste LIMIT 0, 20 à votre requête, donc il sort comme SELECT blah blah; LIMIT 0, 20, qui n'est pas valide SQL.

Questions connexes