Mám node.js skript, který je připojení k místní MariaDB server, vytvářet nějaké tabulky, a potom pokusu o načtení některých dat do nich provedením SQL dotazu jako je tento:
LOAD XML LOCAL INFILE 'C:\\path\\to\\some_data.xml'
INTO TABLE some_data
ROWS IDENTIFIED BY '<data>';
Skript se nezdaří s chybou, jako je:
SqlError: (conn=60, no: 45034, SQLState: 45034) LOCAL INFILE wrong filename. 'C:\path\to\some_data.xml' doesn't correspond to query LOAD XML LOCAL INFILE 'C:\\path\\to\\some_data.xml'
INTO TABLE some_data
ROWS IDENTIFIED BY '<data>';. Query cancelled. Check for malicious server / proxy
Na node.js kód skriptu je jako:
const pathToXmlFile = path.resolve(__dirname, '../some_data.xml')
.replace(/\\/g, '\\\\');
// .replace(/\\/g, '/');
// none of the above work, and neither does no escaping at all
query = `LOAD XML LOCAL INFILE '${pathToXmlFile}'
INTO TABLE some_data
ROWS IDENTIFIED BY '<data>';`;
Snažil jsem se uniknout cestu s lomítka (jsem spuštění skriptu přes Git Bash), chyba zůstává stejná, pouze způsob, cesta, zobrazí se změny. Mám nastavit permitLocalInfile: 'true'
na MariaDB klient připojení a local_infile=1
na obou [mysqld]
a [client]
sekce my.ini
. Na node.js připojení má uživatel na FILE právo.
Uzel verze je 16.13.0, MariaDB npm modul verze je 2.5.5, všechny běží na stejném počítači s Windows 10 (MariaDB server na localhost).
Výše uvedený dotaz funguje naprosto v pořádku, když je spuštěn z HeidiSQL.
Nějaké nápady, co dělám špatně?