Joomla.it Forum
Non solo Joomla... => Database => : maxtemp 08 May 2010, 18:43:01
-
Salve
cerco da un po di giorni, 3, di creare uno script che inserisca i dati di un file Csv, residente nella root, in una tabella del database di joomla (tabella con i campi gia definiti).
Lo script in questione
<?php
$sql="LOAD DATA INFILE'/web/htdocs/www.pippo.it/home/prova.csv' INTO TABLE `Prova` FIELDS TERMINATED BY ','
";
?>
non ricevo errori ma non mi carica i valori nella tabella.
Potete darmi un aiuto?
-
Ciao,
probabilmente non è questo il problema, ma mi pare che la sintassi di questo comando preveda uno spazio dopo INFILE.
-
Fatto ma non succede nulla. Ho effettuato anche il mysql_connect ma nulla. :-\
-
Sicuro del percorso? Prova ad usare il path di Joomla...
-
Prova a caricare il CSV da phpMyAdmin
-
non ricevo errori ma non mi carica i valori nella tabella.
se usi le classi di joomla per eseguire il sql, hai attivato il debug? (se no le exceptions sono intercettate: nessun errore visibile)
ciao,
marco
-
Ho attivato il debug di sistema ma continua a non darmi messaggi di errore!?
Ciao
-
prova a specificare anche le terminazioni di linea ed i caratteri di ENCLOSED. eventualmente prova il modificatore LOCAL.
ciao,
marco
-
Ci ho provato ma non funziona
$sql="LOAD DATA INFILE '/web/htdocs/www.pippo.it/home/prova.csv' INTO TABLE Prova FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY """" LINES TERMINATED BY '\n'
";
anzi ricevo il messaggio
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /web/htdocs/www.pippo.it/home/load.php on line 8
-
:D ma lo hai scritto in visual basic?
$sql="LOAD DATA INFILE '/web/htdocs/www.pippo.it/home/prova.csv' INTO TABLE Prova FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY \"\" LINES TERMINATED BY '\\n'";
oppure
$sql="LOAD DATA LOCAL INFILE '/web/htdocs/www.pippo.it/home/prova.csv' INTO TABLE Prova FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY \"\" LINES TERMINATED BY '\\n'";
ciao, marco.
-
/web/htdocs/www.pippo.it/home/load.php on line 8
sicuro di essere all'interno di joomla? ovvero che il file sia processato da joomla, se no devi controllare tu il funzionamento della query, non serve il debug di joomla.
ciao,
marco
-
Si sono all'interno di joomla, sia il file php che quello csv si trovano nella mia root.
Avevo pensato di fare un import da phpmyadmin e poi di incollare il codice php che viene prodotto cambiando solo il percorso del file:
<?php
$link = mysql_connect('***', '***', '***');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';
$sql = "LOAD DATA LOCAL INFILE \'/web/htdocs/www.pippo.it/home/prova.csv' INTO TABLE `Prova` FIELDS TERMINATED BY \',\' ENCLOSED BY \'\"\' ESCAPED BY \'\\\\\' LINES TERMINATED BY \'\\r\\n\'# 1 riga/e modificata.\n"
. "";
?>
pensavo fosse una buona idea ma mi sbagliavo.
-
è una buona idea, ma due cose:
1. non sei all'interno di joomla: con tale locuzione si intende all'interno del framework, non solo della cartella.
2. manca il codice di selezione del db:
mysql_select_db('nomeDB');
3. manca il codice di esecuzione della query: mysql_query($sql) ;
mi sa che ti conviene rileggere un po' di documentazione ;)
ciao,
marco
-
Ho studiato un po e sono arrivato a questo
<?php
$link = mysql_connect('***', '***', '***');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';
mysql_select_db('***');
$file = "/web/htdocs/www.pippo.it/home/prova.csv";
$command = "(LOAD DATA INFILE ".$file."
INTO TABLE prova
FIELDS TERMINATED BY ';'
LINES TERMINATED BY '\n')";
$result = mysql_query($command) or die( mysql_error() );
?>
ma evidentemente non ho studiato abbastanza infatti adesso ricevo:
Connected successfullyYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LOAD DATA INFILE /web/htdocs/www.pippo.it/home/prova.csv INTO TABLE prova' at line 1
:-[
-
la parentesi è inutile, ma manca il delimitatore del testo per il nome file:
$command = "LOAD DATA INFILE '".$file."' INTO TABLE prova FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'";
o, più leggibile:
$command = "LOAD DATA INFILE '{$file}' INTO TABLE prova FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'";
ciao,
marco
-
Vedo la luce :)
ora però ho un problema, penso, di accessi
Access denied for user '***'@'%' (using password: YES)
:o
forse devo modificare qualche permesso delle mie cartelle?!
-
>:( >:(
io strozzerei volentieri quelli che vanno in giro a dire, per partito preso e senza alcuna conoscenza sistemistica, che per far funzionare i programmi php bisogna cambiare i permessi alle cartelle: ecco i risultati.
@all
se non siete sistemisti evitate di dare consigli da sistemisti! grazie.
@maxtemp
no maxtemp, quello è un messaggio di mysql: significa che le credenziali che stai usando per collegarti al server non sono accettate, verifica i parametri in mysql_connect.
ciao,
marco
-
Scusa mmleoni ma nel mio script avevo anche il controllo di connessione. Comunque ho ricontrollato i dati di accesso ma sono esatti.
-
ricorda che selezioni il db dopo la connessione (e qui non effetti nessun controllo di errore), non basta che l'utente possa collegarsi al server è anche necessario che abbia i permessi sul db e sulla tabella sui quali intende operare, altrimenti avrai l'errore in questione.
ciao,
marco
-
Navigando su internet ho trovato altre persone con questo problema legato ad i database di una notissima società (non so se si possa fare il nome), e ad i permessi di amministratorte che non ho. Forse il LOAD DATA INFILE non è utilizzabile per il mio scopo.
-
se parli di mysql puoi farne il nome...
devi verificare che il db server si trovi sullo stesso server su cui si trova il programma, altrimenti devi usare
LOAD DATA LOCAL INFILE ...
btw: local puoi usarlo in ogni caso, ma in caso il file sia sul db server il processo è più efficiente omettendolo.
ciao,
marco
-
/web/htdocs/www.pippo.it/home/prova.csv
Scusa, sei su di un server locale? A me questo path sembra cortino...
-
No, mi trovo nella root di un server Aru.. con s.o. Unix
-
Ho qualche sito registrato li, ma non ho nessun account di hosting, per cui non vedo i path.
Però, un path su di un hosting professionale che non contenga lo username, non mi suona bene. Non vorrei che usassi il path che trovi nel file manager o nell'ftp, che probabilmente hanno la home dopo il tuo username...
Anche la cartella web subito sotto la / non mi suona.
Per quanto ne so io (che non sono un sistemista) i server dei provider hanno path tipo "/usr/pincopallo/web/..."
Hai provato ad usare le variabili di path di Joomla per indirizzare il file?
<?php echo $this->baseurl ?>
-
No, mi trovo nella root di un server Aru.. con s.o. Unix
ciao maxtemp, non ci crederai ma avevamo riconosciuto la rotta per i caraibi ;)
nello ftp non vedi la home nella path, ma è giusto che ci sia, come immagino tu avrai appreso dalla documentazione o dedotto da configuration.php.
è per quello che ti ho insistito nel dirti che la cosa funziona: esperienza personale.
ricordati però di aggiungere il modificatore LOCAL, dato che, server virtuali a parte, la path è relativa al client e non al server.
ciao,
marco
-
Miticoooo
Funziona!
Già pensavo di adottare altre strade, per la cronaca il mio database si chiama Prova e ho dovuto rispettare la lettera maiuscola iniziale.
Grazie ancora.
comunque la risoluzione è stata nell'utilizzo di LOCAL.
-
ricordati di mettere [RISOLTO] nel titolo del post di apertura, grazie.
che il nome utente sia case sensitive ok, il db mi quadra poco...
Navigando su internet [...] i permessi di amministratore che non ho.
>:( >:(
in internet, come nella vita, c`è un sacco di gente che parla solo perché ha la lingua in bocca; il fatto di non avere nessuna competenza, neanche la capacità base di leggere e comprendere la documentazione, non li ferma certo, anzi meno ne sanno più sono arroganti.
un consiglio per la prossima volta: se dedicherai un oretta a leggere la documentazione scoprirai che poi risolvi tutto in venti minuti ;D ;D
@all
in questi casi si usa praticamente sempre il modificatore LOCAL per indicare alla macchina (al client sulla macchina) di processare localmente il file e poi trasferirne il contenuto al server, che altrimenti non avrebbe modo di accedervi.
ciao,
marco
-
Non il nome utente ma il nome della tabella era case sensitive.
Grazie ancora.
-
errore della 3.23, corretto nella 4.0... ritorna nella 5? ;D
il [RISOLTO]!!! >:(
ciao