Importando dados CSV usando PHP / MySQL - Sintaxe Mysqli

NO FUNDO DESTA PERGUNTA O CÓDIGO FINAL QUE FINALMENTE TRABALHAU!

Tentando implementar isso (Importando dados CSV usando PHP / MySQL). Eu devo estar quase lá ...

notes1: my $ sql veio diretamente do copy / paste phpmyadmin (gerar código php) e correu muito bem no phpmyadmin.

note2: Se eu comentar a linha $ sql = "DELETE FROM dbase" o código corre bem (e a tabela é limpa).

Então, se eu sei que o meu sql está certo e meu código pode rodar outros sqls, por que o abaixo não roda ?! Estou entendendo:

Chamar para uma função de membro execute () em um não-objeto - para a linha

$stmt->execute();

Código completo:

<?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 antecipadamente!

EDITAR:

Feito abaixo das mudanças e ainda não está funcionando!

novo Código:

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

O que eu vejo no meu navegador quando eu corri isso é o seguinte:

Banco de dados padrão é dbname.

LOAD DATA INFILE 'C: /xampp/htdocs/myfile.csv' TAB tab INTO TABELA TERMINADA POR ',' LINHAS TERMINADAS POR '\ r \ n' IGNORE 1 LINHAS

Prepare failed failed: (1295) Este comando não é suportado no protocolo de instruções preparado yetobject (mysqli) # 1 (19) {["affected_rows"] => int (-1) ["client_info"] => string (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) "Este comando não é suportado no protocolo de instrução preparado ainda" ["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) "Tempo de Atividade: 7993 Threads: 2 Perguntas: 865 Perguntas Lentas: 0 Abre: 75 Tabelas de nível: 1 Tabelas abertas: 68 Média de consultas por segundo: 0,108 "[" sqlstate "] => string (5)" 00000 "[" protocol_version "] => int (10) [" thread_id "] => int (117) [" warning_count "] => int (0)}

Nota: Se eu copiar e colar a string sql ecoada acima no prompt do mysql, ela rodará muito bem. Isso deve significar que tanto a questão do local do arquivo quanto a própria string sql estão bem, não ???

como isso pode ser tão difícil?

EDITAR 3.

Tks para todas as respostas e comentários. A versão final do código abaixo funciona:

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

notas úteis:

observe o caminho do arquivo usafrw-slash em vez de barra invertida padrão do windows. Por ordem só vai notar o trabalho. Deus sabe como eu percebi isso ...

aproveite os muitos códigos de depuração oferecidos nas respostas. Eu acho que uma maneira eficaz de verificar se o seu sql está certo para eco (echo $sql) e copie / cole no seu prompt sql. não confie na funcionalidade phpmyadmin 'create php PHP code'.

lembre-se: "Preparados não suportam LOAD DATA"

questionAnswers(3)

yourAnswerToTheQuestion