Pagina 1 di 1

[BUGREPORT] Errore SQL: 1064 - You have an error .....

Inviato: 17/04/2005, 2:47
da marcus
Spesso effettuando il listing delle offerte, o dei produttori, o degli ordini, o altro, si verifica un errore SQL del tipo:
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]
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.

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 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:

Codice: Seleziona tutto

$offset = ($this->number_of_rows_per_page * ($this->current_page_number - 1));
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:

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

Inviato: 23/01/2006, 17:44
da marcus
E' stato rilasciato il Fix ufficiale a questo bug, che riporto qui sotto:
------------------------------------------------------------------------------
limit -20, 20
http://www.oscommerce.com/community/bugs,1605
------------------------------------------------------------------------------

Problem:

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

Solution:

Line 67 in catalog/includes/classes/split_page_results.php must be changed from:

$this->sql_query .= " limit " . $offset . ", " . $this->number_of_rows_per_page;

to:

$this->sql_query .= " limit " . max($offset, 0) . ", " . $this->number_of_rows_per_page;

Line 38 in catalog/admin/includes/classes/split_page_results.php must be changed from:

$sql_query .= " limit " . $offset . ", " . $max_rows_per_page;

to:

$sql_query .= " limit " . max($offset, 0) . ", " . $max_rows_per_page;

Marcus

Re: [BUGREPORT] Errore SQL: 1064 - You have an error .....

Inviato: 23/01/2016, 6:47
da madooeiei
$this->number_of_rows_per_page;
ดาวน์โหลด royal1688

Re: [BUGREPORT] Errore SQL: 1064 - You have an error .....

Inviato: 13/10/2016, 8:53
da adrank888
La linea di codice successiva:





Gclub

Re: [BUGREPORT] Errore SQL: 1064 - You have an error .....

Inviato: 01/07/2017, 11:05
da kakasmall
Bel sito! Amiamo visitare nel tuo blog ... torneremo presto.

^_^ทางเข้าจีคลับ^_^

^_^goldenslot register^_^