Importowanie danych CSV przy użyciu składni PHP / MySQL - Mysqli

W DOLE NINIEJSZEGO PYTANIA KOŃCOWY KOD, KTÓRY W końcu DZIAŁAŁ!

Próbuję to wdrożyć (Importowanie danych CSV przy użyciu PHP / MySQL). Muszę być prawie tam ...

notes1: mój $ sql pochodził prosto z kopiowania / wklejania phpmyadmin (wygeneruj kod php) i działał dobrze w phpmyadminie.

note2: Jeśli skomentuję linię $ sql = "DELETE FROM dbase", kod działa dobrze (a tabela jest czyszczona).

Więc jeśli wiem, że mój sql ma rację, a mój kod może uruchamiać inne sqls, dlaczego nie działa poniżej ?! Otrzymuję:

Wywołanie funkcji członka execute () na obiekcie nie będącym obiektem - dla linii

$stmt->execute();

Pełny kod:

<?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 z góry!

EDYTOWAĆ:

Wykonane poniżej zmian i nadal nie działa!

nowy kod:

<?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();
?>

To, co widzę w mojej przeglądarce po uruchomieniu, jest następujące:

Domyślna baza danych to dbname.

LOAD DATA INFILE 'C: /xampp/htdocs/myfile.csv' INTO TABLE tab FIELDS TERMINATED BY ',' LINES TERMINATED BY 'r' IGNORE 1 LINES

Przygotuj się niepowodzeniem: (1295) Ta komenda nie jest obsługiwana w przygotowanym jeszcze protokole protokołu instrukcji (mysqli) # 1 (19) {["chron_rows "] => int (-1) [" client_info "] => ciąg (79)" 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) "To polecenie nie jest jeszcze obsługiwane w przygotowanym protokole instrukcji" ["error_list"] => array (0) {} ["field_count"] => int (1) ["host_info"] => ciąg (20) "localhost przez TCP / IP" ["info"] => NULL ["insert_id"] => int (0) ["server_info"] => ciąg ( 6) „5.6.11” [„server_version”] => int (50611) [„stat”] => string (133) „Uptime: 7993 Threads: 2 Questions: 865 Slow queries: 0 Otwiera: 75 Flush tables: 1 Otwarte tabele: 68 zapytań na sekundę śred: 0,108 "[" sqlstate "] => ciąg (5)" 00000 "[" protocol_version "] => int (10) [" thread_id "] => int (117) [" warning_count "] => int (0)}

Uwaga: Jeśli skopiuję wklej łańcuch sql echo powyżej w wierszu polecenia mysql, działa dobrze. Powinno to oznaczać, że zarówno problem z lokalizacją pliku, jak i sam łańcuch sql są w porządku, nie ??

jak to może być takie trudne ?!

EDYCJA 3.

Tks za wszystkie odpowiedzi i komentarze. Ostatnia wersja kodu poniżej działa:

<?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;
};
?>

przydatne notatki:

zauważ, że ścieżka pliku używafrw-slash zamiast ukośnika domyślnego Windows. Orderwise zanotuje pracę. Bóg wie, jak to sobie wymyśliłem ...

skorzystaj z wielu kodów debugowania oferowanych w odpowiedziach. chyba jeden skuteczny sposób, aby sprawdzić, czy twój sql ma rację (echo $sql) to i skopiuj / wklej w podpowiedzi sql. nie ufaj funkcjonalności phpmyadmin 'create php PHP code'.

pamiętaj „Przygotowane znaki nie obsługują danych LOAD”

questionAnswers(3)

yourAnswerToTheQuestion