[MySQL] Problemino con UPDATE

Bened

Nuovo Utente
11 Ott 2019
7
0
1
Salve, sono nuovo nel gruppo, spero che qualcuno di voi possa aiutarmi a risolvere un problema di UPDATE in MySQL inviato da una pagina PHP:

Copio l'istruzione:
PHP:
                       $soggetti = array(71 , 72 , 73 , 74);
                        $punti1 = array(1, 2 , 3 , 0);
                        $punti2 = array(1, 1 , 2 , 0);
                        $punti3 = array(2, 3 , 5 , 0);
                      
                                foreach($soggetti as $a => $id)
                                for($x=0; $x<count($a); $x++){   
                          
                                $lista_soggetti[] = ("UPDATE `soggetti` SET ".
                                " `data_modifica` = 2019-10-09 , ".
                                " `utente` = 'pippo.pippo' , ".
                                " `estratto`  = 'SI' , ".
                                " `punti_1` = ".$punti1[$a]." , ".
                                " `punti_2` = ".$punti2[$a]." , ".                               
                                " `punti_3` = ".$punti3[$a]." , ".
                          
                                " `data_estrazione` = 2019-10-09 ".
                                " WHERE `soggetto` = ".$soggetti[$a]."; ");
                                 }
                          
                                $lista_soggetti_estratti = implode($lista_soggetti);
                          
   echo '<pre>'.print_r($lista_soggetti_estratti).'</pre>';
  mysql_query($lista_soggetti_estratti)or die('errore: '. mysql_error());

Questo è il messaggio di errore che mi da la pagina:

UPDATE `soggetti` SET `data_modifica` = 2019-10-09 , `utente` = 'pippo.pippo' , `estratto` = 'SI' , `punti_1` = 1 , `punti_2` = 1 , `punti_3` = 2 , `data_estrazione` = 2019-10-09 WHERE `soggetto` = 71; UPDATE `soggetti` SET `data_modifica` = 2019-10-09 , `utente` = 'pippo.pippo' , `estratto` = 'SI' , `punti_1` = 2 , `punti_2` = 1 , `punti_3` = 3 , `data_estrazione` = 2019-10-09 WHERE `soggetto` = 72; UPDATE `soggetti` SET `data_modifica` = 2019-10-09 , `utente` = 'pippo.pippo' , `estratto` = 'SI' , `punti_1` = 3 , `punti_2` = 2 , `punti_3` = 5 , `data_estrazione` = 2019-10-09 WHERE `soggetto` = 73; UPDATE `soggetti` SET `data_modifica` = 2019-10-09 , `utente` = 'pippo.pippo' , `estratto` = 'SI' , `punti_1` = 0 , `punti_2` = 0 , `punti_3` = 0 , `data_estrazione` = 2019-10-09 WHERE `soggetto` = 74;

errore: 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 'UPDATE `soggetti` SET `data_modifica` = 2019-10-09 , `utente` = 'pippo.pippo' at line 1



Premetto che, incollando la stringa dell'UPDATE su MySQL funziona perfettamente, e funziona anche dalla pagina PHP se il dati si riferiscono ad un solo record, ho provato anche mettendo dati all'interno degli apici, cioè cosi:

                        $soggetti = array(71 , 72 , 73 , 74);
                        $punti1 = array(1, 2 , 3 , 0);
                        $punti2 = array(1, 1 , 2 , 0);
                        $punti3 = array(2, 3 , 5 , 0);
                      
                                foreach($soggetti as $a => $id)
                                for($x=0; $x<count($a); $x++){   

$lista_soggetti[] = ("UPDATE `soggetti` SET ".
                                " `data_modifica` = '2019-10-09' , ".
                                " `utente` = 'pippo.pippo' , ".
                                " `estratto`  = 'SI' , ".
                                " `punti_1` = ' ".$punti1[$a]." ' , ".
                                " `punti_2` = ' ".$punti2[$a]." ' , ".                               
                                " `punti_3` = ' ".$punti3[$a]." ' , ".
                          
                                " `data_estrazione` = '2019-10-09' ".
                                " WHERE `soggetto` = ' ".$soggetti[$a]." '; ");
                                 }
Grazie in anticipo
 
Ultima modifica di un moderatore:

marino51

Utente Attivo
28 Feb 2013
2.609
132
63
Lombardia
intanto toglierei tutti gli "apici storti" (non ricordo il loro nome)
UPDATE `soggetti` SET diventa UPDATE soggetti SET
questi apici non servono se i nomi non hanno spazi interposti e confondono molto la lettura

mentre l'apice (sulla mia tastiera sta sotto il punto di domanda), deve racchiudere tutti i valori, non espressamente numerici, tra cui le date, cosa che non vedo nella tua query

fatto strano che abbia funzionato con altri sistemi, con la sintassi che hai pubblicato ….
 

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
3.939
294
83
@Bened
Da regolamento del forum, come tutti noi sei tenuto ad usare il tag
o il tag
per il PHP, quando posti del codice, oppure la funzione codice dalla barra degli strumenti


Inoltre ti prego di leggere attentamente il regolamento generale del forum e quello di sezione dove posti prima di continuare
Grazie
Per questa volta te lo sistemo io ma mi raccomando per il futuro
 
  • Like
Reactions: Bened

Bened

Nuovo Utente
11 Ott 2019
7
0
1
@Bened
Da regolamento del forum, come tutti noi sei tenuto ad usare il tag
o il tag
per il PHP, quando posti del codice, oppure la funzione codice dalla barra degli strumenti


Inoltre ti prego di leggere attentamente il regolamento generale del forum e quello di sezione dove posti prima di continuare
Grazie
Per questa volta te lo sistemo io ma mi raccomando per il futuro

Mi scuso per non essere stato attento e rigrazio per la pazienza e la disponibilità avuta
 

Bened

Nuovo Utente
11 Ott 2019
7
0
1
intanto toglierei tutti gli "apici storti" (non ricordo il loro nome)
UPDATE `soggetti` SET diventa UPDATE soggetti SET
questi apici non servono se i nomi non hanno spazi interposti e confondono molto la lettura

mentre l'apice (sulla mia tastiera sta sotto il punto di domanda), deve racchiudere tutti i valori, non espressamente numerici, tra cui le date, cosa che non vedo nella tua query

fatto strano che abbia funzionato con altri sistemi, con la sintassi che hai pubblicato ….
Grazie per l'aiuto, ho seguito le tue indicazioni, ho tolto gli apici storti ed ho racchiuso i valori dentro gli apici (quelli giusti),
ma l'errore si ripresenta.

Volevo segnalare che apici storti vengono generati da MySQL quando modifico un record, quindi ho copiato pari pari la stringa che si è generata ed incollata all'interno della pagina PHP, ecco perchè anche con gli apici storti funzione in MySQL
 

marino51

Utente Attivo
28 Feb 2013
2.609
132
63
Lombardia
per me la query deve essere scritta in questo modo
Codice:
UPDATE soggetti SET data_modifica = '2019-10-09', utente = 'pippo.pippo', estratto = 'SI', punti_1 = 1, punti_2 = 1, punti_3 = 2, data_estrazione = '2019-10-09' WHERE soggetto = 71;
UPDATE soggetti SET data_modifica = '2019-10-09', utente = 'pippo.pippo', estratto = 'SI', punti_1 = 2, punti_2 = 1, punti_3 = 3, data_estrazione = '2019-10-09' WHERE soggetto = 72;
UPDATE soggetti SET data_modifica = '2019-10-09', utente = 'pippo.pippo', estratto = 'SI', punti_1 = 3, punti_2 = 2, punti_3 = 5, data_estrazione = '2019-10-09' WHERE soggetto = 73;
UPDATE soggetti SET data_modifica = '2019-10-09', utente = 'pippo.pippo', estratto = 'SI', punti_1 = 0, punti_2 = 0, punti_3 = 0, data_estrazione = '2019-10-09' WHERE soggetto = 74;
l'errore segnalato
"syntax near 'UPDATE soggetti SET data_modifica = 2019-10-09, utente = 'pippo.pippo' at line 1"
guarda caso nella tua linea 1 la data era senza apici
quindi controlla bene la query costruita dal tuo script php
e se dovesse dare ancora errore, posta l'echo della stessa query con il motivo dell'errore
 

Bened

Nuovo Utente
11 Ott 2019
7
0
1
per me la query deve essere scritta in questo modo
Codice:
UPDATE soggetti SET data_modifica = '2019-10-09', utente = 'pippo.pippo', estratto = 'SI', punti_1 = 1, punti_2 = 1, punti_3 = 2, data_estrazione = '2019-10-09' WHERE soggetto = 71;
UPDATE soggetti SET data_modifica = '2019-10-09', utente = 'pippo.pippo', estratto = 'SI', punti_1 = 2, punti_2 = 1, punti_3 = 3, data_estrazione = '2019-10-09' WHERE soggetto = 72;
UPDATE soggetti SET data_modifica = '2019-10-09', utente = 'pippo.pippo', estratto = 'SI', punti_1 = 3, punti_2 = 2, punti_3 = 5, data_estrazione = '2019-10-09' WHERE soggetto = 73;
UPDATE soggetti SET data_modifica = '2019-10-09', utente = 'pippo.pippo', estratto = 'SI', punti_1 = 0, punti_2 = 0, punti_3 = 0, data_estrazione = '2019-10-09' WHERE soggetto = 74;
l'errore segnalato
"syntax near 'UPDATE soggetti SET data_modifica = 2019-10-09, utente = 'pippo.pippo' at line 1"
guarda caso nella tua linea 1 la data era senza apici
quindi controlla bene la query costruita dal tuo script php
e se dovesse dare ancora errore, posta l'echo della stessa query con il motivo dell'errore
Ti ringrazio (scusa per il tu) per l'attenzione, ho fatto le correzioni che mi hai suggerito ma continua a non esegurie la query, invio il codice rivisto e l'echo del messaggio di errore:

PHP:
$soggetti = array(71 , 72 , 73 , 74);
$punti1 = array(1, 2 , 3 , 0);
$punti2 = array(1, 1 , 2 , 0);
$punti3 = array(2, 3 , 5 , 0);

foreach($soggetti as $a => $id)
for($x=0; $x<count($a); $x++){   

$lista_soggetti[] = ("UPDATE soggetti SET ".
" data_modifica = '2019-10-09' , ".
" utente = 'pippo.pippo' , ".
" estratto  = 'SI' , ".   
" punti_1 = ".$punti1[$a]." , ".   
" punti_2 = ".$punti2[$a].", ".                                 
" punti_3 = ".$punti3[$a]." , ".   
" data_estrazione = '2019-10-09' ".
" WHERE soggetto = ".$soggetti[$a]."; ");
}

$lista_soggetti_estratti = implode($lista_soggetti);
                                                  
echo '<pre>'.print_r($lista_soggetti_estratti).'</pre>';
mysql_query($lista_soggetti_estratti)or die('errore: '. mysql_error());
e questo è l'echo della query ed il messaggio di errore:

Codice:
UPDATE soggetti SET data_modifica = '2019-10-09', utente = 'pippo.pippo', estratto = 'SI', data_estrazione = '2019-10-14', punti_1 = 1, punti_2 = 1, punti_3 = 2 WHERE soggetto = 71; 
UPDATE soggetti SET data_modifica = '2019-10-09', utente = 'pippo.pippo', estratto = 'SI', data_estrazione = '2019-10-14', punti_1 = 2, punti_2 = 1, punti_3 = 3 WHERE soggetto = 72; 
UPDATE soggetti SET data_modifica = '2019-10-09', utente = 'pippo.pippo', estratto = 'SI', data_estrazione = '2019-10-14', punti_1 = 3, punti_2 = 2, punti_3 = 5 WHERE soggetto = 73; 
UPDATE soggetti SET data_modifica = '2019-10-09', utente = 'pippo.pippo', estratto = 'SI', data_estrazione = '2019-10-14', punti_1 = 0, punti_2 = 0, punti_3 = 0 WHERE soggetto = 74;
errore: 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 '
UPDATE soggetti SET data_modifica = '2019-10-09', utente = 'pippo.pippo', ' at line 1
 

Bened

Nuovo Utente
11 Ott 2019
7
0
1
Ho risolto:

PHP:
 $soggetti = array(71 , 72 , 73 , 74);
 $punti1 = array(1, 2 , 3 , 0);
 $punti2 = array(1, 1 , 2 , 0);
  $punti3 = array(2, 3 , 5 , 0);
                           
  foreach($soggetti as $a => $id)
  for($x=0; $x<count($a); $x++){       
                               
  $lista_soggetti[] = ("UPDATE soggetti SET ".
  " data_modifica = '2019-10-09' , ".
  " utente = 'pippo.pippo' , ".
  " estratto  = 'SI' , ".   
  " punti_1 = ".$punti1[$a]." , ".   
  " punti_2 = ".$punti2[$a]." , ".                                   
  " punti_3 = ".$punti3[$a]." , ".   
  " data_estrazione  = '2019-10-09'  ".
  " WHERE soggetto = ".$soggetti[$a]."; ");
   mysql_query($lista_soggetti[$a])or die('errore: '. mysql_error());
   }

$lista_soggetti_estratti = implode($lista_soggetti);                                        
echo '<pre>'.print_r($lista_soggetti_estratti).'</pre>';

//mysql_query($lista_soggetti_estratti)or die('errore: '. mysql_error());
L'errore era mettere l'esecuzione della query fuori il ciclo for
 

marino51

Utente Attivo
28 Feb 2013
2.609
132
63
Lombardia
L'errore era mettere l'esecuzione della query fuori il ciclo for
ovvero mettendo la query all'interno del ciclo for, esegui una query alla volta, esattamente come dice il manuale evidenziato,
le query multiple non sono supportate
e la query non deve terminare con punto e virgola ….