编写PHP文件以从CSV读取并执行SQL查询

时间:2009-06-02 04:39:18

标签: php mysql csv

我希望PHP脚本能够以下列格式从CSV文件中读取内容

id, sku
1,104101
2,105213

共有1486个条目,我相信最好使用for循环而不是while!EOF。

之后,我想对名为m118的数据库执行SQL查询,表catalog_product_entity。

查询就像UPDATE sku = $ csvSku WHERE id = $ csvId

作为PHP和MySQL的新手,我不知道从哪里开始编码。

6 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:3)

您需要执行以下操作:

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

现在使用Split来获取逗号分隔值的数组

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

现在你有一个数组用于$ line上的逗号分隔值。您可以执行简单的字符串格式化以将这些值粘贴到SQL查询中。

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

使用mysql api将这些查询发送到数据库

}
fclose($fp);

答案 2 :(得分: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缓存查询(在准备中),然后使用执行中传递的参数。
  • 它是可移植的:PDO可以连接到各种类型的DB,而不仅仅是MySQL,所以如果你需要切换DB,它就容易多了。

答案 3 :(得分:1)

好的,我不会为你编写代码,因为如果我这样做你就不会学习。但我会指出你正确的方向。有关在PHP中解析CSV文件的信息,请查看此链接http://us.php.net/fgetcsv。一个简单的谷歌搜索也应该提供有关将其输入MySQL表格的必要信息。

答案 4 :(得分:0)

Goblyn27是正确的。看看php.net上的fgetcsv()和mysql_query()。文档中甚至有关于如何执行此操作的示例。

答案 5 :(得分: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;


?>