将csv文件存入mysql数据库,将CSV文件保存到mysql数据库中

I have a lot of csv files in a directory. With these files, I have to write a script that put their content in the right fields and tables of my database. I am almost beginner in php language : I have found some bits of code on the Internet. It seems to work, but I am stuck at a stage. Some topics are related on this website, but I did not found the ecat problem.

I have written a php script that permits to get the path and the name of these files. I managed too to create a table whose name depends of each csv (e.g : file ‘data_1.csv’ gives the table data_1.csv in my-sql). All the tables have the three same fields, id, url, value.

The last thing to do is to populate these tables, by reading each file and put the values separated by ‘|’ character in the right tables. For example, if a line of ‘data_1.csv’ is

8756|htttp://example.com|something written

I would like to get a record in data_1.csv table where 8756 is in id, htttp://example.com in url field, and something written in value field.

I have found the way to read and print these csv with fcsvget function. But I do not know how to make these lines go into the SQL database. Could anyone help me on this point?

Here is my script below

ini_set('max_execution_time', 300);

$dbhost = 'localhost';

$dbuser = 'root';

$dbpass = '';

$conn = mysql_connect($dbhost, $dbuser, $dbpass, true) or die ('Error connecting to mysql');

$dbname = 'test_database';

mysql_select_db($dbname);

$bdd = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);

$mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname);

if (mysqli_connect_errno()) {

printf("Connect failed: %s\n", mysqli_connect_error());

exit();

}

else {

echo "hello
";

}

$dir = 'C:\wamp\www\test';

$imgs = array();

if ($dh = opendir($dir)) {

while (($file = readdir($dh)) !== false) {

if (!is_dir($file) && preg_match("/\.(csv)$/", $file)) {

array_push($imgs, $file);

}

}

closedir($dh);

} else {

die('cannot open ' . $dir);

}

foreach ($imgs as $idx=>$img) {

$class = ($idx == count($imgs) - 1 ? ' class="last"' : '');

$filePath=$dir . '\\'. $img;

$file = fopen($filePath, "r") or exit("Unable to open file!");

$nom = 'FILE: ' . $dir . '\\'. $img;

echo $nom;

settype($nom, "string");

echo '
';

$chemin = '' . </p><p>$img . '' . "\n";

echo $chemin;

$file_name = basename($filePath);

$sql = 'CREATE TABLE `' . $file_name . '` (id int(20000), url varchar(15), value TEXT)';

mysql_query($sql,$conn);

$handle = fopen($filePath, 'r');

while (($row = fgetcsv($handle)) !== false) {

foreach ($row as $field) {

echo $field . '
';

}

}

fclose($handle);

}

echo ("VERIFY");

for ($i = 1; $i <= 1682; $i++) {

echo ("
A : " . $i);

$checkRequest= "select * from movies where movieID='". $i."'";

echo ("
". $checkRequest);

if ($result = $mysqli->query($checkRequest)) {

printf("
Select ". $i ."returned %d rows.\n", $result->num_rows);

if ($result->num_rows == 0) {

echo ("I : " . $i);

}

$result->close();

}

}

$mysqli->close();

?>

解决方案

MySQL provides a wonderful feature that allows you to import a CSV file directly, in a single query.

The SQL command you're looking for is LOAD DATA INFILE

Quick example:

LOAD DATA INFILE 'fileName'

INTO TABLE tableName

FIELDS TERMINATED BY '|' OPTIONALLY ENCLOSED BY '"'

LINES TERMINATED BY '\n'

(

field1,

field2,

field3,

@variable1,

@variable2,

etc

)

set

(

field4 = concat(@variable1,@variable2)

);

That's a fairly basic example, but it covers most of what you'd want. The manual page gives full details of how to do some very complex stuff with it.

Hope that helps.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值