簡體   English   中英

PHP加載數據文件無效

[英]PHP Load Data Infile not working

我還是這里的新手。 我試圖在php腳本上使用mysql LOAD DATA INFILE加載csv文件。 它既不會給出任何錯誤,也不會加載任何數據。 有人可以幫我嗎? 我正在使用以下php代碼

<?php

$db1=mysql_connect('localhost', 'root', '');
mysql_select_db('student',$db1);

$query = "LOAD DATA INFILE 'mysqlresults.csv' INTO TABLE student.student_info FIELDS TERMINATED BY ','";

$result = mysql_query($query);
if ($result == true){
echo 'success';
}
else{
echo 'not success';
}
?>

您需要設置文件的路徑

LOAD DATA LOCAL INFILE '/path/to/your/local/file' INTO TABLE 

mysql不會與運行php腳本的位置相同,因為mysql然后將查找其自己的路徑位置,並且找不到文件(因為它在其他位置)。

您可以在php中使用__DIR__來獲取php正在運行的當前位置,因此查詢看起來像$query = "LOAD DATA INFILE ". __DIR__ . DIRECTORY_SEPARATOR . "'mysqlresults.csv' INTO TABLE student.student_info FIELDS TERMINATED BY ','"; $query = "LOAD DATA INFILE ". __DIR__ . DIRECTORY_SEPARATOR . "'mysqlresults.csv' INTO TABLE student.student_info FIELDS TERMINATED BY ','";

DIRECTORY_SEPARATOR是因為DIR沒有斜杠

您的PHP代碼使用MySQL擴展作為MySQL服務器的客戶端。 這兩個組件(PHP和MySQL服務器)多次在不同的計算機上運行。

LOAD DATA INFILE可以從運行MySQL服務器的計算機上的CSV文件中加載數據。

我想您的文件位於運行PHP腳本的計算機上(即,運行MySQL客戶端的計算機上)。

LOAD DATA INFILE命令的LOCAL選項告訴MySQL客戶端從運行它的計算機(“本地”計算機)上的文件中加載數據,並將其發送到服務器以進行加載。

對於該命令的兩個版本,如果文件名均不包含路徑,則MySQL客戶端或服務器使用其配置來了解在何處搜索文件(事實證明,由於開發人員沒有在文件中找到文件,因此通常找不到該文件)知道/關心該配置並將文件放置在其他位置)。

解決方案非常簡單:始終使用文件的絕對路徑。 如果文件是本地文件(在涉及PHP的情況下,這種情況發生在99.99%中),則可以使用PHP魔術常數__DIR__和函數dirname()從腳本位置開始構建CSV文件的絕對路徑。包含代碼。

從您的代碼看來,CSV文件與PHP文件位於同一目錄中(這不是一個好習慣)。 該代碼應類似於:

$path = __DIR__.'/mysqlresults.csv';
$query = "LOAD DATA LOCAL INFILE '$path' INTO TABLE student.student_info FIELDS TERMINATED BY ','";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM