Importieren von CSV-Daten mit PHP / MySQL - Mysqli-Syntax

UNTEN IN DIESER FRAGE DER ENDGÜLTIGE CODE!

Der Versuch, dies umzusetzen (Import von CSV-Daten mit PHP / MySQL). Ich muss fast da sein ...

notes1: mein $ sql kam direkt von copy / paste phpmyadmin (php code generieren) und lief einwandfrei in phpmyadmin.

note2: Wenn ich die Zeile $ sql = "DELETE FROM dbase" kommentiere, läuft der Code einwandfrei (und die Tabelle wird bereinigt).

Also, wenn ich weiß, dass mein SQL richtig ist und mein Code andere SQLs ausführen kann, warum läuft das Folgende nicht ?! Ich erhalte:

Aufruf einer Member-Funktion execute () für ein Nicht-Objekt - für die Zeile

$stmt->execute();

Vollständiger Code:

<?php
$mysqli  =  new mysqli('localhost','root','pass','dbase');
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}

$sql = "LOAD DATA INFILE \'./myfile.csv\' INTO TABLE tab\n"
. " FIELDS TERMINATED BY \',\'\n"
. " LINES TERMINATED BY \'\\r\\n\'\n"
. " IGNORE 1 LINES";

//$sql="DELETE FROM dbase";

$stmt=$mysqli->prepare($sql);
$stmt->execute(); 
$stmt->close();
$mysqli->close();
?>

tks im voraus!

BEARBEITEN:

Unten vorgenommene Änderungen und immer noch nicht funktioniert!

neuer Code:

<?php

$mysqli  =  new mysqli('localhost','root','pass','dbase');
/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

/* return name of current default database */
if ($result = $mysqli->query("SELECT DATABASE()")) {
    $row = $result->fetch_row();
    printf("Default database is %s.\n", $row[0]);
    $result->close();
}

$sql = "LOAD DATA INFILE 'C:/xampp/htdocs/myfile.csv' INTO TABLE tab
        FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\\r\\n'
    IGNORE 1 LINES";

echo "<br>";
echo "<br>";
echo $sql;
echo "<br>";
echo "<br>";
$stmt=$mysqli->prepare($sql);

/* Prepared statement, stage 1: prepare */
if (!($stmt = $mysqli->prepare($sql))) 
{    echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;
}


// NOTE HERE WE'RE DUMPING OUR OBJ TO SEE THAT IT WAS 
// CREATED AND STATUS OF PREPARE AND THEN KILLING SCRIPT   
var_dump($mysqli);
exit();

//$sql="DELETE FROM intrasdump

$stmt=$mysqli->prepare($sql);
$stmt->execute(); 
$stmt->close();
$mysqli->close();
?>

Was ich in meinem Browser sehe, wenn ich das laufen lasse, ist das folgende:

Die Standarddatenbank ist Datenbankname.

LOAD DATA INFILE 'C: /xampp/htdocs/myfile.csv' in die Registerkarte TABLE FIELDS TERMINATED BY ',' LINES TERMINATED BY '\ r \ n' IGNORE 1 LINES

Vorbereitung fehlgeschlagen: (1295) Dieser Befehl wird im vorbereiteten Anweisungsprotokoll yetobject (mysqli) # 1 (19) {["affect_rows"] => int (-1) ["client_info"] => string (79) "nicht unterstützt. mysqlnd 5.0.11-dev - 20120503 - $ Id: 40933630edef551dfaca71298a83fad8d03d62d4 $ "[" client_version "] => int (50011) [" connect_errno "] => int (0) [" connect_error "] => NULL [" errno "] => int (1295) ["error"] => string (68) "Dieser Befehl wird im vorbereiteten Anweisungsprotokoll noch nicht unterstützt." ["error_list"] => array (0) {} ["field_count"] => int (1) ["host_info"] => string (20) "localhost via TCP / IP" ["info"] => NULL ["insert_id"] => int (0) ["server_info"] => string ( 6) "5.6.11" ["server_version"] => int (50611) ["stat"] => string (133) "Uptime: 7993 Threads: 2 Questions: 865 Slow Queries: 0 Opens: 75 Flush Tables: 1 Offene Tabellen: Durchschnittlich 68 Abfragen pro Sekunde: 0,108 "[" sqlstate "] => string (5)" 00000 "[" protocol_version "] => int (10) [" thread_id "] => int (117) [" warning_count " "] => int (0)}

Hinweis: Wenn ich die oben an die mysql-Eingabeaufforderung zurückgegebene SQL-Zeichenfolge kopiere, funktioniert sie einwandfrei. Das sollte bedeuten, dass sowohl das Dateispeicherortproblem als auch die SQL-Zeichenfolge selbst in Ordnung sind, nein ???

wie kann das so schwer sein ?!

EDIT 3.

Tks für alle Antworten und Kommentare. Die endgültige Codeversion unten funktioniert:

<?php

$mysqli  =  new mysqli('localhost','root','pass','dbname');
/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$sql = "LOAD DATA INFILE 'C:/xampp/htdocs/myfile.csv' INTO TABLE tab
        FIELDS TERMINATED BY ','
        LINES TERMINATED BY '\\r\\n'
        IGNORE 1 LINES";

//Try to execute query (not stmt) and catch mysqli error from engine and php error
if (!($stmt = $mysqli->query($sql))) {
    echo "\nQuery execute failed: ERRNO: (" . $mysqli->errno . ") " . $mysqli->error;
};
?>

nützliche Hinweise:

Beachten Sie den Dateipfad verwendetfrw-Schrägstrich anstelle von Windows-Standard-Back-Slash. Orderwise wird nur die Arbeit vermerken. Gott weiß, wie ich das herausgefunden habe ...

Nutzen Sie die vielen Debugging-Codes, die in den Antworten angeboten werden. Ich denke, ein effektiver Weg, um zu überprüfen, ob Ihre SQL das richtige Echo ist (echo $sql) es und kopieren / einfügen in Ihre SQL-Eingabeaufforderung. Vertraue nicht phpmyadmin 'Erstelle PHP-Code' Funktionalität.

Denken Sie daran, dass vorbereitete Stms LOAD DATA nicht unterstützen.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage