sql >> Database >  >> RDS >> Mysql

MySQL laadgegevens:deze opdracht wordt nog niet ondersteund in het voorbereide instructieprotocol

U kunt PREPARE niet gebruiken om LOAD DATA INFILE . uit te voeren .

De lijst met instructies die u kunt uitvoeren met PREPARE zijn gedocumenteerd op deze pagina:https:/ /dev.mysql.com/doc/refman/5.7/en/sql-syntax-prepared-statements.html onder de subkop "SQL-syntaxis toegestaan ​​in voorbereide verklaringen". Merk op dat deze lijst in eerdere versies van MySQL anders kan zijn.

Omdat je PREPARE niet kunt gebruiken , kunt u de methode die u gebruikt niet uitvoeren door een variabele in te stellen en een dynamisch SQL-statement te maken.

Maar u kunt LOAD DATA INFILE . uitvoeren zonder PREPARE . te gebruiken . U moet de bestandsnaam in de instructie interpoleren met behulp van shell-variabelevervanging en deze vervolgens uitvoeren als een directe SQL-instructie.

Uw update.sql-bestand kan er als volgt uitzien:

LOAD DATA LOCAL INFILE '%spacename%' INTO TABLE tmp 
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';

Vervolgens kunt u uw shell-variabele in het bestand vervangen en het resultaat op deze manier uitvoeren:

sed s/%spacename%/$1/ update.sql | 
  mysql -h "localhost" -u "root" "-pmypassword" "mydb"

Een andere, eenvoudigere manier is om mysqlimport te gebruiken. , behalve dat dit vereist dat de invoerbestandsnaam hetzelfde is als uw tabelnaam. U kunt uw invoerbestand hernoemen zodat het overeenkomt met de tabel waarin u wilt laden (die u tmp noemt ), of maak anders een symbolische link:

ln -s $1 /tmp/tmp.list
mysqlimport --local -h "localhost" -u "root" "-pmypassword" "mydb" /tmp/tmp.list
rm -f /tmp/tmp.list

De extensie ".list" wordt genegeerd door mysqlimport, dus u kunt elke bestandsextensie gebruiken, of geen.



  1. PHP &MySQL:mysqli_num_rows() verwacht dat parameter 1 mysqli_result is, boolean gegeven

  2. Hoe geef ik de eerste letter als hoofdletter weer?

  3. Een dag aftrekken van een datum in MariaDB

  4. Hoe MySQL op Windows te installeren