2016-04-08 5 views
1

Ich arbeite an Datenfunktionalität zu laden.Ich habe hauptsächlich zwei Server, eine enthalten MYsql und andere ist für Web-Portal.LOAD DATA LOCAL INFILE funktioniert nicht, wenn mysql zu einem Remote-Server

Wenn ich versuche, load local infile unter Verwendung von Abfrage durchzuführen, wird es mir geben "Der verwendete Befehl ist nicht mit dieser MySQL-Version erlaubt" Fehler.

Query : "LOAD DATA LOCAL INFILE '/var/www/html/btisms/contact_data/".$file_name."' REPLACE 
         INTO TABLE `tbl_recipient` 
         FIELDS 
         TERMINATED BY ',' 
         ENCLOSED BY '\"' 
         LINES 
         TERMINATED BY '\n'   
         (`gr_grp_id`, `gr_cust_id`, `gr_name`, `gr_number`) 
         ". 

Unten Schritte führen bereits von mir.

1) Fügen Sie local-infile = 1 in die Tags my.cnf und [client] und [mysql] ein.

2) Erlaube Zugriff für das Verzeichnis in apparmod.

3) Berechtigung für bestimmte Benutzer erteilen.

4) MySQL Version: 5.5.4 (CentOS-7)

Kann jemand mir empfehlen, wenn etwas fehlt.

Es funktioniert, wenn ich versuchte, diese Funktion durchzuführen, wenn mysql und Webserver auf demselben Server sind.

+0

Sie erwähnen nicht, einen Neustart MySQL Server, nachdem Sie Änderungen an der Konfigurationsdatei für den Server vorgenommen haben. (Der [mysql] -Abschnitt,) Wenn Ihr phpmyadmin den eingebauten MySQL-Client verwendet (und nicht den separat installierten mysql-Client), gibt es wahrscheinlich eine Konfigurationseinstellung in phpmyadmin, die der Einstellung im Abschnitt [client] für den Client entspricht mysql Befehlszeilenclient. – spencer7593

+0

Danke für die schnelle Antwort. Ja, ich habe mit dem Neustart MySQL und MySQL ist separat auf meinem Server installiert. –

Antwort

0

Sie versuchen, eine lokale Datei zu laden.

Falls Sie laufen in einem anderen Server (Remote oder nicht), müssen Sie gewährleisten, dass die Datei im gleichen Ordner befindet sich in der Abfrage verwenden.

Wenn die Datei nicht vorhanden ist, führt die mysql keine Aktion oder keinen Fehler aus.

Um Probleme zu entwickeln Mysql zu sparen, empfehle ich Ihnen, eine Lösung zu nehmen wie folgt aus:

$handle = fopen("your_file", "r"); 
$con = mysqli_connect($db_host, $db_user, $db_pass, 'your_db_name'); 
$niceArr = array(); 

if ($handle) { 
    while (($line = fgets($handle)) !== false) { 
     // process the line read. 
     $lineArr = explode(",", trim($line)); 

     foreach($lineArr as $line) { 
      // Remove "" 
      $niceArr[] = trim($line, '"'); 
     } 

     // should check if isset($niceArr[ x ]) 
     $q = "insert into tbl_recipient SET ". 
      "gr_grp_id = '$niceArr[0]',". 
      "gr_cust_id = '$niceArr[1]',". 
      "gr_name = '$niceArr[2]',". 
      "remoteaddr = '$niceArr[3]',". 
      "gr_number = '$niceArr[4]'"; 

     $res = mysqli_query($con, $q); 
     if(!empty(mysqli_error($con))) { 
      throw new Exception("Error writing line in db: $db_host"); 
     } 

    } 
    fclose($handle); 
    mysqli_close($con); 

} else { 
    // error opening the file. 
} 

Auf diese Weise können:

  • Spurabweichungsfehler über den Speicherort der Datei,
  • verfolgen Fehler über nicht ordnungsgemäß formatierte Zeilen und schließlich
  • mysql Fehler separat.

Dies wird Ihr Leben viel einfacher machen.

0

Die Frage in Bezug auf Verbindung in PHP, die es LOCAL INFILE

mysql verwenden:

mysql_connect(server,user,code,false,128); // 128 enables LOCAL INFILE 
mysql_select_db(database); 

Mit mysqli:

$conn = mysqli_init(); 
mysqli_options($conn, MYSQLI_OPT_LOCAL_INFILE, true); 
mysqli_real_connect($conn,server,user,code,database); 
Verwandte Themen