Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Errore su LOAD DATA LOCAL INFILE verso MariaDB (Debian Bookworm)

6 views
Skip to first unread message

^Bart

unread,
Nov 2, 2023, 11:08:02 AM11/2/23
to
Salve,

se mi loggo all'interno di MariaDB e lancio il seguente comando tutto
funziona:

MariaDB [my_database]> source query.sql;

Di seguito il contenuto di query.sql

USE my_database;
TRUNCATE items_temp;

LOAD DATA LOCAL INFILE '/home/itoffice/data_bridge/items.txt'
INTO TABLE items_temp
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(id_tc_anartic, cod_art, desc_art, ump, umi, coef_ump_umi, gest_maga,
cod_iva, cod_cat_cont, desc_cat_cont, cod_class_pat, art_stato,
disabilitato, ean, peso_netto, peso_lordo, um_peso, lunghezza,
larghezza, altezza, diametro, cod_cat01, desc_cat01,
cod_cat02, desc_cat02, cod_cat03, desc_cat03, cod_cat04, desc_cat04,
cod_cat05, desc_cat05, cod_cat06, desc_cat06, cod_cat07,
desc_cat07, cod_cat08, desc_cat08, cod_cat09, desc_cat09, cod_cat10,
desc_cat10, cod_cat11, desc_cat11, cod_cat12, desc_cat12,
cod_cat13, desc_cat13, cod_cat14, desc_cat14, cod_cat15, desc_cat15,
cod_cat16, desc_cat16, cod_cat17, desc_cat17, cod_cat18,
desc_cat18, cod_cat19, desc_cat19, cod_cat20, desc_cat20, dt_creazione,
dt_last_upd);

Quindi cosa ci vuole a metterlo in uno script php?

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Parametri da inserire per collegarsi al DB
$servername = "localhost";
$username = "my_user";
$password = "my_password";
$database = "my_database";
$options = [MYSQLI_OPT_LOCAL_INFILE => true];
$conn = mysqli_connect($servername, $username, $password, $database);
$conn->options(MYSQLI_OPT_LOCAL_INFILE, true);

if (!$conn) {
die("Connessione al database fallita: " . mysqli_connect_error());
}

// Query SQL
$query = "USE my_database;
TRUNCATE items_temp;

LOAD DATA LOCAL INFILE '/home/itoffice/data_bridge/items.txt'
INTO TABLE items_temp
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(id_tc_anartic, cod_art, desc_art, ump, umi, coef_ump_umi, gest_maga,
cod_iva, cod_cat_cont, desc_cat_cont, cod_class_pat, art_stato,
disabilitato, ean, peso_netto, peso_lordo, um_peso, lunghezza,
larghezza, altezza, diametro, cod_cat01, desc_cat01, cod_cat02,
desc_cat02, cod_cat03, desc_cat03, cod_cat04, desc_cat04, cod_cat05,
desc_cat05, cod_cat06, desc_cat06, cod_cat07, desc_cat07, cod_cat08,
desc_cat08, cod_cat09, desc_cat09, cod_cat10, desc_cat10, cod_cat11,
desc_cat11, cod_cat12, desc_cat12, cod_cat13, desc_cat13, cod_cat14,
desc_cat14, cod_cat15, desc_cat15, cod_cat16, desc_cat16, cod_cat17,
desc_cat17, cod_cat18, desc_cat18, cod_cat19, desc_cat19, cod_cat20,
desc_cat20, dt_creazione, dt_last_upd)";

if (mysqli_multi_query($conn, $query)) {
echo "Query eseguita con successo.";
} else {
echo "Errore nell'esecuzione della query: " . mysqli_error($conn);
}

mysqli_close($conn);
?>

Questo è il risultato:
$ php articoli_test3.php
Query eseguita con successo. (ma di fatto è stato in grado di eseguire
solo TRUNCATE).

Ho modificato anche il file php.ini ma... nisba :\
; Allow accessing, from PHP's perspective, local files with LOAD DATA
statements
; https://php.net/mysqli.allow_local_infile
mysqli.allow_local_infile = On

Cosa potrei controllare ulteriormente?

^Bart

fmigliori

unread,
Nov 2, 2023, 12:45:20 PM11/2/23
to

"USE my_database" non è ridondante?
L'utente è abilitato?
Che errore ti da?

Ciao

^Bart

unread,
Nov 2, 2023, 4:23:23 PM11/2/23
to
Il 02/11/23 17:45, fmigliori ha scritto:
>
> "USE my_database" non è ridondante?

Probabilmente sì nel momento in cui carico il file *.sql direttamente da
dentro MariaDB avendo già selezionato il db ma questo non mi da errore,
il problema è il file php che permette l'esecuzione del TRUNCATE ma non
esegue il LOAD DATA LOCAL INFILE.

> L'utente è abilitato?

L'utente in questione si logga senza problemi da CLI verso MariaDB e da
qui riesce ad eseguire sia il TRUNCATE che il file *.sql dove è presente
il LOAD DATA LOCAL INFILE, il problema è lato file php il quale, come
già accennato, esegue il TRUNCATE ma NON esegue l'importazione del file!

Come già accennato nel mio post iniziale ho editato il file php.ini
abilitando ysqli.allow_local_infile = On poi non so se sia necessario e
se ci sia qualcosa da abilitare in MariaDB per ricevere l'import dei
dati da php!

> Che errore ti da?

I controlli che eseguo all'interno del file php mi danno l'ok per la
login però per capire come mai non funzioni il caricamento del file
dovrei attivare i log per tutte le query di MariaDB, per fortuna sono su
una macchina di test e forse solo in questo modo potrei capire davvero
cosa stia accadendo sotto.

> Ciao

Saluti.
^Bart
0 new messages