2012-08-11 17 views
1

email.txt的路徑是上傳文本每行文件到我已經email.txt存儲在我的服務器的MySQL行

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

任何其他好的方法可以accepted.please不直接在其他方面的建議存儲數據數據庫同時存儲電子郵件等。

+0

而且您確定密碼正確嗎? – Palladium 2012-08-11 00:37:05

+0

@鈀100%肯定,我已直接嘗試在phpmyadmin那裏我也得到相同的錯誤 – user1515503 2012-08-11 00:40:00

回答

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') 
+0

我沒有root訪問,你可以請給任何其他的PHP代碼將工作 – user1515503 2012-08-11 01:02:00

+0

如果你想'LOAD DATA'那麼你的帳戶需要'FILE'特權。沒有這些,你只需要在循環中讀取文件並在讀取文件時發出INSERT語句。 – drew010 2012-08-11 01:07:51

+0

@ user1515503如果您發佈了幾行文件,我可以根據需要製作示例PHP代碼。 – drew010 2012-08-11 01:13:01

相關問題