2009-06-02 62 views
7

我想一個PHP腳本來讀取CSV文件內容的格式如下寫一個PHP文件從CSV讀取和執行SQL查詢

id, sku 
1,104101 
2,105213 

總共有1486項是,我相信最好使用for循環而不是while!EOF。

之後,我想對名爲m118的數據庫表catalog_product_entity執行SQL查詢。

查詢會像更新SKU = $ csvSku WHERE ID = $ csvId

處於兩個PHP和MySQL的新手,我不知道從哪裏開始編碼。

回答

9

fgetcsv可以用來解析CSV文件的數據庫。可以使用mysql_query方法來執行MySQL查詢。

完整的代碼如下:

<?php 
$fin = fopen('catalog_product_entity.csv','r') or die('cant open file'); 
$link = mysql_connect('localhost', 'm118', 'pw'); 
If (!$link) { 
    die ('Could not connect: ' . mysql_error()); 
} 
@mysql_select_db('m118') or die ('Unable to select database'); 
echo "Connection succeeded <br />\n"; 
while (($data=fgetcsv($fin,1000,","))!==FALSE) { 
    $query = "UPDATE catalog_product_entity SET sku='$data[1]' WHERE entity_id='$data[0]'"; 
    mysql_query($query); 
    echo "Record updated <br />\n"; 
    } 
fclose($fin); 
mysql_close(); 
?> 
+2

嘿......看看那個,你已經搞定了;) – RedBlueThing 2009-06-02 05:18:25

1

好的男人,我不會爲你寫代碼,因爲你不會學習,如果我這樣做。但我會指出你正確的方向。查看此鏈接​​瞭解如何在PHP中解析CSV文件。一個簡單的谷歌搜索應該也會給你關於將它輸入到MySQL表中的必要信息。

+0

嘿男人,謝謝,其實我已經想通了自己。意識到PHP非常簡單。 – segfault 2009-06-02 05:12:52

0

Goblyn27是正確的。看看php.net上的fgetcsv()和mysql_query()。在文檔中甚至還有一些例子來說明如何做到這一點。

2

你需要做這樣的事情:

$filename = "file_name_on_server.csv" 
$fp = fopen($filename ,"r"); 
while ($line = fgets ($fp)) 
{ 

現在使用Split獲得逗號分隔值

$arr = split (",", $line); 

現在你有上$逗號分隔值的數組的數組線。您可以執行簡單的字符串格式化,將這些值粘貼到SQL查詢中。

$query = "INSERT INTO `TableBlah` (Field1, Field2) VALUES (" . $arr[0] . "," . $arr[1] . ")"; 

使用mysql api這些查詢發送到

} 
fclose($fp); 
3

幹得好學習:)

你應該也許現在在PHP瞭解PDO,因爲它是(在我看來)是最好的,最安全,在PHP執行MySQL的查詢最快的方法:

<?php 
$fin = fopen('catalog_product_entity.csv','r') or die('cant open file'); 
try { 
    $link = new PDO('mysql:dbname=m118;host=localhost', 'm118', 'pw'); 
    echo 'Connection succeeded <br />' . PHP_EOL; 
    $stmt = $db->prepare('UPDATE catalog_product_entity SET sku = :sku WHERE entity_id = :id'); 
    //Only give the length parameter if you **KNOW** that no line will be longer than that 
    while (($data=fgetcsv($fin,1000,","))!==FALSE) { 
     if ($stmt->execute(array(':sku' => $data[1], ':id' => $data[0]))) { 
      echo 'Record updated <br />' . PHP_EOL; 
     } else { 
      $err = $stmt->errorInfo(); 
      echo 'Update Failed: ' . $err[2] . PHP_EOL; 
     } 
    } 
} catch (PDOException $e) { 
    echo 'Connection failed: ' . $e->getMessage(); 
} 
fclose($fin); 

的PDO腳本有超過你的以下優勢:

  • 更安全:PDO根據需要自動引用插入的數據。這可以防止SQL注入攻擊。
  • 速度更快:PDO緩存查詢(在準備中),然後使用execute中傳遞的參數。
  • 它是可移植的:PDO可以連接到各種類型的數據庫,不僅僅是MySQL,所以如果你需要切換數據庫的話,它更容易。
0
<?php 
include ("dbsanjog.php"); 
$uploadedfile=$_REQUEST['uploadedfile']; 
    $target_path = "dataupload/"; 
    $user=$_REQUEST['username']; 
$target_path = $target_path.$user.".csv"; 

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) 
{ 
    echo "The file ". basename($_FILES['uploadedfile']['name']). "has been uploaded"; 
} 

//echo $target_path; die; 
//$row = 1; 
$handle = fopen($target_path, 'r'); 
//$sql="update agents_det set where user='$user'"; 


while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) 
{ 
    $query = "UPDATE agents_det SET contact='$data[3]' WHERE user='$user'"; 

} 

fclose($handle); 
//mysql_query($test); 
//echo ($test[1]); die; 
//echo $test; die; 


?>