上传文本文件每行进入mysql行

时间:2012-08-11 00:33:25

标签: php mysql

我的email.txt存储在我的服务器中,email.txt的路径是

/home/xxxx/public_htnl/email.txt

email.txt包含数千个订阅者电子邮件,每天都会更新。 我想每天使用cron将这些电子邮件导入其他数据库。

我试过这个,但是给出了错误

无法加载。 Access denied for user 'test'@'localhost' (using password: YES)

我认为我无权运行LOAD DATA INFILE

我的代码是:

<?php

$db = mysql_connect('localhost', 'test', 'test')
or die('Failed to connect');
mysql_select_db('test', $db);


$string = file_get_contents("http://www.xyz.com/email.txt", "r");
$myFile = "/home/xxx/public_html/email.txt";

$fh = fopen($myFile, 'w') or die("Could not open: " . mysql_error());
fwrite($fh, $string);
fclose($fh);


$result = mysql_query("LOAD DATA INFILE '$myFile'" .
                  " INTO TABLE email");
if (!$result) {
die("Could not load. " . mysql_error());
}
?>

可以接受任何其他好的方法。请不要在存储电子邮件等时将数据直接存储在其他数据库中。

1 个答案:

答案 0 :(得分:0)

作为root MySQL用户,请尝试运行查询:

GRANT FILE on *.* to 'test'@'localhost';

如果仍然出现错误,请确保您的测试用户的用户名和密码正确无误,并且您正在访问MySQL的主机与测试用户和密码的主机相匹配。

编辑:

<?php

$db = mysql_connect('localhost', 'test', 'test') or die(mysql_error());

if (!mysql_select_db('test', $db)) die(mysql_error());

$emails = file("http://www.xyz.com/email.txt");

foreach($emails as $email) {
    $email = trim($email);
    if ($email == '' || strpos($email, '@') === false) continue;
    $email = mysql_real_escape_string($email);

    $query = "INSERT INTO `email` VALUES('$email')";
    $result = mysql_query($query);
    if (!$result) {
        echo "Failed to insert $email.  " . mysql_error() . "<br />\n";
    }
}

如果有很多电子邮件,您可以构建一组电子邮件地址,并经常进行扩展插入。

INSERT INTO emails VALUES('email1'), ('email2'), ('email3'), ('email4')