Newsgroup: it.lavoro.professioni.webmaster
Titolo: MySQL accetta "CREATE" ma non "INSERT"

Salve,
non so se  sono nel NG giusto, ma provo lo stesso. Altrimenti posterò in 
quello del MySQL.  (Ma sono sicuro che gli esperti di qui sapranno 
illuminarmi) :-))
 
Questo è il codice standard che uso per questo progetto :
 
 
<?php
 
define  ("SQL_HOST","localhost");
define  ("SQL_USER","root");
define  ("SQL_DB","normative_db");
 
$conn = mysql_connect(SQL_HOST, SQL_USER) ;
if (!$conn)
   {
   die('Could not connect: ' . mysql_error());
   }
 
mysql_select_db(SQL_DB,$conn);
 
  $sql1 =
   "INSERT INTO ABLO1 (A, B, C, D, E)  VALUES (3.5, 3, 2, 1, 0.5)" ;
 
 
  mysql_query($sql1);
 
  mysql_close($conn);
 
  echo ('done successfully') ;
 
?>
 
 
le istruzioni  CREATE,  SELECT funzionano ottimamente.
Invece con l'istruzione "INSERT" non succede niente di niente.
Il resto del codice è identico sia per SELECT, CREATE e INSERT.
 
Da cosa puo' dipendere ?  Se invece inserisco i dati a mano con 
phpmyadmin funziona tutto e poi posso 'leggerli' con SELECT *.
 
Da che kakkio puo' dipendere ?  (Uso XAMPP su Windows XP e finora non ho 
mai avuto problemi)
 
Grazie per i suggerimenti.
 
 


 
	if (!mysql_query($sql1))
		print "Error: " . mysql_error();
 
...non rammento la sintassi esatta, ma l'idea penso sia chiara ;-)
 
Leonardo
 
-- 
Tell us whether you spy, in the light of the morn,
what saluted was fiercely at the fall of the past day:
whose pips and whose bands in the very heart of the fray
bravely floated from the bulwarks to which we were sworn?


 
ecco lo statement attuale
 
    $sql1 =
    "INSERT INTO MEMO5 (A, B)  VALUES (0, 3.5)
                                         (3.75, 4)
       					(4.25, 4.25)
					(4.5,  4.5)
					(4.75, 0)";
 
 
 
Ecco la stampa dell'errore :
 
Error: 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 '(3.75, 4) (4.25, 4.25) (4.5, 4.5) ' at line 2
 
Quindi uso una sintassi che non è accettata dalla presente versione 
installata di MySQL.
Mo' so' ca§§i acidi andare a trovare a quale versione corrisponde il 
codice che uso...

 4.25) (4.5,  4.5) (4.75, 0)";
 
E tu hai scritto che lo statement dato a mano (console o phpmyadmin) 
funziona. Ne sei sicuro?


funziona se do i valori a mano, tramite phpmyadmin.
E' lui stesso che lo crea lo statement SQL, ma è uguale in sostanza.

 E' lui stesso che lo crea lo statement SQL, ma è uguale in sostanza.
 
Non in sostanza, ti sto chiedendo di aprire una console, dove 
preferisci, e _copiare_ed_incollare_ la riga che hai proposto sul ng.
Se non lo vuoi fare sei libero e amen.

near '(3.75, 4) (4.25, 4.25) (4.5, 4.5) ' at line 2
 
Togli tutti quegli spazi, ma soprattutto metti delle virgole fra le coppie
di VALUES.
 
Vedrai che il mondo tornera' a sorriderti.
 
 
CREATE TABLE MEMO5(A float, B float);
 
Query OK, 0 rows affected (0.00 sec)
 
INSERT INTO MEMO5 (A, B)  VALUES (0, 3.5) (3.75, 4) (4.25, 4.25);
 
ERROR 1064 (42000): 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 '(3.75, 4) (4.25, 4.25)' at line 1
 
INSERT INTO MEMO5 (A, B)  VALUES (0, 3.5), (3.75, 4), (4.25, 4.25);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0


di VALUES.
 
mi stavo chiedendo dove avesse messo gli apici :)
 
--
pigmalion at home
http://www.pigmalion.it/
 


Non è che non voglio : phpmyadmin non funziona così. mi chiede di 
inserire i dati in un form, poi lui esegue e mi fa vedere DOPO che l'ha 
eseguito, lo statement.
Ci sono solo due differenze : il database lo specifica come 
'normative_db.MEMO5' (cogli apici) e anche i valori sono tra apici.
Ho provato a fare esattamente lo stesso sul mio statement nel programma 
php, ma mi ha dato lo stesso errore.
 


 
Bingo !!!
mettendo le virgole tra i VALUES ha funzionato.
Ma kakkio, ho dovuto mettere tutto su una riga.
Se lo faccio in due o tre righe mi da ancora errore.
 
Ma io sto usando questo metodo per inizializzare una tabella statica,
e se ho tredici righe per quindici colonne, non posso mica farlo stare 
su una riga...
 
Dovrò allora crearmi un FORM in html, ed è proprio quello che volevo 
evitare.
 


ho provato con e senza apici : stesso errore. Non sono gli apici il 
problema.
Decisamente un problema erano le virgole tra i gruppi di VALUES.
Perň adesso devo risolvere il problema dello statement su piů righe.
 

Però adesso devo risolvere il problema dello statement su più righe.
 
e le virgole... :)
 
mi piacerebbe avere il tempo di testare il codice in locale, per cui
mi sto accodando con i sugerimenti a naso per capire cos'è...


 Non è che non voglio : phpmyadmin non funziona così.
 
Non è vero, c'è la tab "SQL" che ti permette di inserire istruzioni SQL 
e di eseguirle.
Inoltre non ti ho chiesto necessariamente di usare phpmyadmin, anche la 
console da riga di comando è adatta.
 
Il problema, secondo me, è che dato che ti hanno detto chiaramente di 
aggiungere le virgole tra le coppie. hai risolto il problema per la tuq 
query specifica ma non hai imparato come identificarlo da solo.
Un passaggio per   console -> errore -> ricerca su web   aiuta di più.


Non so cosa intendi per 'console'. Dici che posso fare tutto in una 
finestra DOS di Windows XP ? e lanciare il MySQL da lì ??
Ma ho visto adesso sì che usando il phpmyadmin posso immettere 
direttamente comandi SQL.
Vuol dire che d'ora in poi, testerò i comandi da lì prima di inserirli 
nel codice.
 
Comunque in questo modo non posso testare la lunghezza della linea di 
comando. Pechè lì le accetta in qualsiasi modo, anche se la query è su 
più righe. Invece nel codice mi dà errore.
 

più righe. Invece nel codice mi dà errore.
 
phpmyadmin mi sa che fa l'escape dei caratteri per te... la riga di
comando è più spartana e se non fai l'escape per bene da errore
subito...


su una riga...
 
Sì che puoi.
 
	$str = $riga_longa_longa_per_girgenti;
 
	$str = preg_replace('/\s\s+/', ' ', $str);
 
...e ora $str, quella che mandi a MySQL, è su una sola riga e senza spazi
in soprannumero. Fai contento un pigro e controlla tu se la sintassi vera
e' \s con la s minuscola, o \S con la S maiuscola.
 
Una delle due query ti darà righe con SOLTANTO spazi, sicche' lo vedi :-D


 funziona se do i valori a mano, tramite phpmyadmin.
 
sicuramente non la query che hai postato
 
http://dev.mysql.com/doc/refman/5.5/en/insert.html
 
 
 
 
 
-- 
Ho altri modi di farmi del male, tipo iniziare rapporti con donne a
900 km di distanza... Perche' il mio masochismo dovrebbe arrivare a
LEGGERE LE TUE MINCHIATE?
 
 


 
finora se mettevo direttamentze i dati da phpmyadmin, lo facevo usando 
il 'FORM' che appariva, non tramite SQL.
 
Quello lo farò la prossima volta che avrò un messaggio di errore, a 
scopo di debugging.
 

 (cit.)
 
come mai preferisci andare per tentativi invece di leggere il manuale?
 
 
 
-- 
se si può montare si può anche smontare
 
 


a) per esperienza i miei 'manuali' (libri comprati in libreria) spesso 
portano esempi che non funzionano.
Infatti il mio codice l'ho derivato dal libro : "PHP5,Apache e MySQL - 
Sviluppo di siti Web"-  WROX / Hoepli editore - "
Un ottimo testo peraltro.
 
b) se non funzionano gli esempi, controllo sul web (HTML.it, 
php.org
 etc.)
 
c) se nemmeno lì risolvo il problema, scrivo sul NG appropriato.
 
Cosa c'è di male nel seguire queste regole ??
 
Peraltro in questo piccolo progetto, copio il codice della WROX pari pari.
E perfino negli esempi su diversi siti, NON APPARE LA VIRGOLA tra i 
VALUES. Da nessuna parte.
 

 Da nessuna parte.
 
praticamente ogni libro ha una ERRATA CORRIGE (a volte viene allegata 
al libro stesso) che puoi trovare online
 
-- 
ma tu non hai piu msn?
sì ma ci entro ogni morte di papa. sto sollecitando il vaticano.
 
 

 VALUES. Da nessuna parte.
 
Il libro non dice per quale versione di MySQL è scritto?

 Il libro non dice per quale versione di MySQL è scritto?
 
sì, il 4.0.20.
quella che ho installata è la versione 5.0.7
 
Non pensavo che potesse differire così tanto.
 
 

 Non pensavo che potesse differire così tanto.
 
Però è importante, non sarebbe stato plausibile che in tutto un libro 
non funzionassero gli esempi.
 
In questo caso non c'era retrocompatibilità tra versioni 4 e 5, ma non è 
certo una regola fissa, anzi. Ad ogni modo si può scegliere di ignorare 
le istruzioni d'uso, o parte di esse, ma solo dopo averle lette.

 le istruzioni d'uso, o parte di esse, ma solo dopo averle lette.
 
IMVHO.