[MySQL] Problemino con UPDATE

  • Creatore Discussione Creatore Discussione Bened
  • Data di inizio Data di inizio

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:
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 ….
 
@Bened
Da regolamento del forum, come tutti noi sei tenuto ad usare il tag
code-gif.6007
o il tag
php-png.6009
per il PHP, quando posti del codice, oppure la funzione codice dalla barra degli strumenti
box-inserisci-2-png-jpg.6008


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
Da regolamento del forum, come tutti noi sei tenuto ad usare il tag
code-gif.6007
o il tag
php-png.6009
per il PHP, quando posti del codice, oppure la funzione codice dalla barra degli strumenti
box-inserisci-2-png-jpg.6008


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
 
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
 
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
 
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
 
considerato che la query prodotta non mi ha dato errore con ms sql server, (non ho mysql)
ho provato a leggere il manuale, con questo risultato

upload_2019-10-15_13-5-46.png


buona correzione
 

Allegati

  • upload_2019-10-15_13-4-59.png
    upload_2019-10-15_13-4-59.png
    32 KB · Visite: 389
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
 
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 ….
 

Discussioni simili