2014-10-08 88 views
2

我想用mysql LOAD DATA LOCAL INFILE通過使用mysqli的php腳本將一些csv數據導入到我的mysql數據庫中。這是我的SQL字符串的樣子:mysql通過php腳本加載數據infile - 不工作

LOAD DATA LOCAL INFILE '/var/www/html/dashmaker/uploads/HHdata.csv' INTO TABLE dashmaker.HHdata FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n' IGNORE 1 LINES; 

這是我的PHP腳本的樣子:

$sql = "LOAD DATA LOCAL INFILE '/var/www/html/dashmaker/uploads/HHdata.csv' 
     INTO TABLE dashmaker.HHdata 
     FIELDS TERMINATED BY ',' 
     OPTIONALLY ENCLOSED BY '\"' 
     LINES TERMINATED BY '\n' 
     IGNORE 1 LINES;"; 

$con=mysqli_connect("localhost","[user]","[password]","[database]"); 
// Check connection 
if (mysqli_connect_errno()) { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
}; 

$result = mysqli_query($sql, $con); 

if (mysql_affected_rows() == 1) { 
    $message = "The data was successfully added!"; 
} else { 
    $message = "The user update failed: "; 
    $message .= mysql_error(); 
}; 

echo $message; 

mysqli_close($con); 

我發現我需要設置mysql的my.cnf中,包括在當地的infile [mysql]和[mysqld] - 所以我已經做到了。

當我通過shell運行sql查詢它的作品。當我嘗試做它通過PHP腳本錯誤消息($消息)我現在得到說:

The user update failed: Access denied for user ''@'localhost' (using password: NO) 

一個奇怪的是,它並沒有表現出任何的用戶名前的@「localhost」的。不明白爲什麼。除此之外,我使用相同的連接設置來使用php腳本從數據庫運行常規SELECT查詢。用戶也具有FILE權限。

我已經廣泛搜索,但還沒有找到任何可以解釋發生了什麼事情。任何意見將不勝感激。

+1

你的MySQL混合使用的API'mysql_'和'mysqli_'功能。他們做**不**混合;專門使用'mysqli_'。另外,你沒有在'[user]'等中使用括號,對嗎?這不是MSSQL,它是MySQL,刪除它們。 – 2014-10-08 06:00:38

+1

另外,在'mysqli_'中,數據庫連接優先,反轉這些'$ result = mysqli_query($ sql,$ con);'讀爲'$ result = mysqli_query($ con,$ sql);' – 2014-10-08 06:03:34

+1

謝謝!令人難以置信的快速反應!這是工作。我認爲錯誤信息也讓我失望 - mysql_affected_rows()現在是mysql_affected_rows($ con)...並且我沒有爲用戶/密碼使用方括號 - 只是爲了表明這些是佔位符。再次感謝! – 2014-10-08 06:17:33

回答

7

在幾個實例中,您正在混合MySQL API與mysql_mysqli_函數。

  • mysql_affected_rows()
  • mysql_error()

他們這樣做搭配在一起;全部使用mysqli_

另外,你沒有使用括號中的[user]等,是嗎?這是MSSQL語法,刪除它們。

另外,在mysqli_,DB連接至上,顛倒這些$result = mysqli_query($sql, $con);改爲$result = mysqli_query($con, $sql);

$sql = "LOAD DATA LOCAL INFILE '/var/www/html/dashmaker/uploads/HHdata.csv' 
     INTO TABLE dashmaker.HHdata 
     FIELDS TERMINATED BY ',' 
     OPTIONALLY ENCLOSED BY '\"' 
     LINES TERMINATED BY '\n' 
     IGNORE 1 LINES;"; 

$con=mysqli_connect("localhost","user","password","database"); 
// Check connection 
if (mysqli_connect_errno()) { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
}; 

$result = mysqli_query($con, $sql); 

if (mysqli_affected_rows($con) == 1) { 
    $message = "The data was successfully added!"; 
} else { 
    $message = "The user update failed: "; 
    $message .= mysqli_error($con); 
}; 

echo $message; 
mysqli_close($con);