2009-06-02 36 views
7

Tôi muốn một kịch bản PHP để đọc nội dung từ một tập tin CSV theo định dạng sauViết một file PHP để đọc từ CSV và thực thi SQL Query

id, sku 
1,104101 
2,105213 

có tổng cộng 1.486 mục, tôi tin rằng rằng tốt hơn nên sử dụng vòng lặp for thay vì trong khi EOF.

Sau đó, tôi muốn thực hiện truy vấn SQL trên cơ sở dữ liệu có tên m118, bảng catalog_product_entity.

Truy vấn sẽ như thế nào CẬP NHẬT sku = $ csvSku WHERE id = $ csvId

Là một người mới ở cả hai PHP và MySQL, tôi không biết bắt đầu từ đâu mã hóa.

Trả lời

9

fgetcsv thể được sử dụng để phân tích các tập tin CSV. Phương thức mysql_query có thể được sử dụng để thực hiện các truy vấn MySQL.

Mã được thực hiện như sau:

<?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

Này ... nhìn vào đó, bạn đã làm việc nó ra;) – RedBlueThing

+0

Đi từ 0 đến viết mã đó là một thành tích tốt đẹp. Xin chúc mừng. –

+0

Cảm ơn Cannonade và Goblyn. Nó luôn luôn cảm thấy tuyệt vời để tìm hiểu một cái gì đó mới! – segfault

1

Ok người đàn ông, tôi sẽ không viết mã cho bạn vì bạn sẽ không học nếu tôi làm. Nhưng tôi sẽ chỉ cho bạn đi đúng hướng. Kiểm tra liên kết này http://us.php.net/fgetcsv để biết thông tin về phân tích tệp CSV trong PHP. Một tìm kiếm google đơn giản cũng nên cung cấp cho bạn các thông tin cần thiết để nhập nó vào một bảng MySQL.

+0

Xin chào, cảm ơn, thực sự tôi đã tự tìm ra. Nhận ra rằng PHP khá đơn giản. – segfault

0

Goblyn27 là chính xác. Hãy xem fgetcsv() và mysql_query() trên php.net. Thậm chí còn có các ví dụ trong tài liệu về cách thực hiện điều này.

2

Bạn sẽ cần phải làm một cái gì đó như:

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

hiện nay sử dụng Split để có được một mảng các giá trị dấu phẩy phân cách

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

Bây giờ bạn có một mảng các giá trị dấu phẩy phân cách trên $ hàng. Bạn có thể làm định dạng chuỗi đơn giản để gắn các giá trị đó vào một truy vấn SQL.

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

Sử dụng mysql api để gửi những truy vấn đến các cơ sở dữ liệu

} 
fclose($fp); 
3

Well done vào học tập :)

Bạn nên có lẽ bây giờ tìm hiểu về PDO trong PHP, vì nó là (theo ý kiến ​​của tôi) là tốt nhất, an toàn nhất và cách nhanh nhất để thực hiện truy vấn MySQL trong PHP:

<?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); 

kịch bản PDO có những ưu điểm sau trên của bạn:

  • Đó là an toàn hơn: PDO tự động trích dẫn dữ liệu được chèn khi cần. Điều này ngăn chặn các cuộc tấn công SQL injection.
  • Nhanh hơn: PDO lưu trữ truy vấn (trong quá trình chuẩn bị) và sau đó sử dụng các tham số được truyền trong thực thi.
  • Thiết bị di động: PDO có thể kết nối với nhiều loại DB khác nhau, không chỉ MySQL, vì vậy nếu bạn cần chuyển đổi DB, dễ dàng hơn nhiều.
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; 


?> 
Các vấn đề liên quan