[BUGREPORT] Errore SQL: 1064 - You have an error .....
Inviato: 17/04/2005, 2:47
Spesso effettuando il listing delle offerte, o dei produttori, o degli ordini, o altro, si verifica un errore SQL del tipo:
La causa è un bug non critico delle classi split_page_results (file: split_page_results.php), sia lato shop che lato admin.
Il codice errato della classe lato shop è il seguente (riga 61 circa):
La prima volta che il listing viene istanziato $this->current_page_number viene inizializzato ad 1. Se il numero di items è zero $this->number_of_pages vale 0, per cui $this->current_page_number viene settato a 0.
La linea di codice successiva:
genera allora un offset negativo nell'opzione LIMIT della query che fa 'arrabbiare' MySQL se la versione e la 4.1 o sup.
Una soluzione banale consiste nell'aggiungere un if di controllo, come segue:
Un discorso del tutto analogo vale per la classe split lato admin.
Concludo segnalando anche la mancanza di un controllo di consistenza sulla variabile $max_rows, in altre parole valori nulli o negativi non vengono 'filtrati'.
Marcus
L'errore si verifica puntualmente tutte le volte che il numero di elementi da listare è zero, ma solo se la versione di MySQL è la 4.1 o sup.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 '-20, 20' at line 1
...segue la query eseguita...
[TEP STOP]
La causa è un bug non critico delle classi split_page_results (file: split_page_results.php), sia lato shop che lato admin.
Il codice errato della classe lato shop è il seguente (riga 61 circa):
Codice: Seleziona tutto
if ($this->current_page_number > $this->number_of_pages) {
$this->current_page_number = $this->number_of_pages;
}
La linea di codice successiva:
Codice: Seleziona tutto
$offset = ($this->number_of_rows_per_page * ($this->current_page_number - 1));
Una soluzione banale consiste nell'aggiungere un if di controllo, come segue:
Codice: Seleziona tutto
if ($this->number_of_pages > 0) {
if ($this->current_page_number > $this->number_of_pages) {
$this->current_page_number = $this->number_of_pages;
}
} else $this->current_page_number=1;
Un discorso del tutto analogo vale per la classe split lato admin.
Concludo segnalando anche la mancanza di un controllo di consistenza sulla variabile $max_rows, in altre parole valori nulli o negativi non vengono 'filtrati'.
Marcus