2012-08-09 21 views
1

我需要到数据库中创建一个CSV导入的数据,但我有3个表Php csv导入可能的方式?

所以如何分离,什么是可能的方式像 1创建CSV)如果涉及一个混乱

我的CSV数据数据alredy表1因此检查所需的数据插入或不 或更新 2)我也需要,如果数据不同时插入的结果也DISPLY插入数据未插入等等

+0

试试这个:http://stackoverflow.com/a/11956237/1598548使用mysql做这个工作似乎要快一点。 – Craigo 2012-08-14 16:06:00

回答

1

我实现这个代码它是测试代码。我觉得这是非常使用全

你必须遵循一些规则: -

贵国的CSV文件根据数据库表名(例如:数据库表名用户,那么CSV应该users.csv)

2.您的CSV文件的第一行应该是数据库表字段名(例如:ID,姓名等)后,然后开始你的数据录入

3.you可以从数据源类: - http://code.google.com/p/php-csv-parser/,因为我有以下要求代码:require_once'CSV/DataSource.php';

<?php 
ini_set('memory_limit','512M'); 
$dbhost = "localhost"; 
$dbname = "excel_import"; 
$dbuser = "root"; 
$dbpass = ""; 

$conn=mysql_connect ($dbhost, $dbuser, $dbpass) or die ("I cannot connect to the database because: " . mysql_error()); 
mysql_select_db($dbname) or die("Unable to select database because: " . mysql_error()); 


require_once 'CSV/DataSource.php'; 

$filename = "Book1.csv"; 
//$filename = $_POST['filename']; 
$ext = explode(".",$filename); 

$path = "uploads/".$filename; 

$dbtable = $ext[0]; 


import_csv($dbtable, $path); 


function import_csv($dbtable, $csv_file_name_with_path) 
{ 
    $csv = new File_CSV_DataSource; 
    $csv->load($csv_file_name_with_path); 

    $csvData = $csv->connect(); 

    $res=''; 
    foreach($csvData as $key) 
    { 
     $myKey =''; 
     $myVal=''; 
     foreach($key as $k=>$v) 
     { 


      $myKey .=$k.','; 
      $myVal .="'".$v."',"; 

     } 
     $myKey = substr($myKey, 0, -1); 
     $myVal = substr($myVal, 0, -1); 




     $query="insert into ".$dbtable." ($myKey)values($myVal)"; 
     $res= mysql_query($query); 

    } 

    if($res ==1) 
    { 

    echo "record successfully Import."; 
    }else{ 

    echo "record not successfully Import."; 
    } 
} 

?> 
0
$row = 1; 

if (($handle = fopen("path to your csv file/data.csv", "r")) !== FALSE) 
{ 
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) 
    { 
     $row++; 
     print_r($data); 
    } 

    fclose($handle); 
} 

基于你可以做进一步的步骤打印数据。

+0

我在yii中需要这个csv。 – user1542274 2012-08-13 05:31:25

+0

我在这个应用程序中开发一款葡萄酒,酿酒厂,复古应用程序,我使用yii来提升csv真正的葡萄酒,葡萄酒,酿酒厂,因此需要您对葡萄酒csv的建议,需要酒庄编号或名称哪一个更好,如果输入错误的酒庄编号或名称,我采取的行动请给我建议 – user1542274 2012-08-13 05:33:12

2

通过使用phpexcel您可以轻松地在Yii框架从http://phpexcel.codeplex.com提取物导入Excel/CSV

1.download最新phpexcel到扩展文件夹

2.创建动作控制器安给予适当的基本路径和phpexcelpath

public function actionImport() 
      { 
        $message = ''; 
        if (!empty($_POST)) 
        { 
        $file = CUploadedFile::getInstanceByName('import'); 
        $spec = Yii::app()->basePath.'/data/imports/'.$file->name; 
        $file->saveAs($spec); 



        spl_autoload_unregister(array('YiiBase','autoload')); 




        $phpExcelPath = Yii::getPathOfAlias('ext.phpexcel.vender'); 

         include($phpExcelPath . DIRECTORY_SEPARATOR . 'PHPExcel.php'); 

        spl_autoload_register(array('YiiBase', 'autoload')); 


        try { 



         $inputFileType = PHPExcel_IOFactory::identify($spec); 
         $objReader = PHPExcel_IOFactory::createReader($inputFileType); 

         if ($inputFileType != 'xls') 
          { 
          $objReader->setReadDataOnly(true); 
          } 
         $objPHPExcel = $objReader->load($spec); 
         $objWorksheet = $objPHPExcel->setActiveSheetIndex(0); 
         $highestRow = $objWorksheet->getHighestRow(); 
         for ($row = 1;$row < $highestRow+1; $row++) 
          { 
          $model= new ExamScores; // Yii AR model 
          $model->id = $objWorksheet->getCellByColumnAndRow(1, $row)->getValue(); 
          $model->student_id = $objWorksheet->getCellByColumnAndRow(2, $row)->getValue(); 
           $model->exam_id = $objWorksheet->getCellByColumnAndRow(3, $row)->getValue(); 
           $model->marks = $objWorksheet->getCellByColumnAndRow(4, $row)->getValue(); 
          $model->save(false); 
          $model->detachBehaviors(); // PHP < 5.3 memory management 
          unset($model); 
          Yii::app()->user->setFlash('sucess','Mark saved Successfully'); 
          } 


         } 
        catch (Exception $e) 
         { 
         $message = 'There was a problem handling your file. Technical details: '.$e->getMessage(); 

         } 
        if (! empty($message)) 
         { 
         Yii::app()->user->setFlash('error',$message); 

         } 
        }  
        $this->render('import'); 
      } 

3.in您的视图文件

<!--<div class="formCon"> 
<div class="formConInner">--> 

<table width="100%" border="0" cellspacing="0" cellpadding="0"> 
    <tr> 
    <td width="247" valign="top"> 

    <?php $this->renderPartial('left_side');?> 

    </td> 
    <td valign="top"> 




<h1>IMPORT EXCEL SHEET</h1> 

<?php if(Yii::app()->user->hasFlash('sucess')): ?> 

<div class="flash-success"> 
    <?php echo Yii::app()->user->getFlash('sucess'); ?> 
</div> 

<?php endif; ?> 

<div style="background-color: #E6E4E4;"> 
<table width="100%" cellspacing="2" cellpadding="2"> 

<tr> 
<?php echo CHtml::beginForm('', 'post', array('enctype'=>'multipart/form-data')); ?> 
<tr><td>&nbsp;</td></tr> 
<td><?php echo CHtml::label('File to Import', 'fti'); ?> 
<?php echo CHtml::fileField('import', '', array('id'=>'fti')); ?></td> 
</tr> 


<tr><td>&nbsp;</td></tr> 
<tr><td>&nbsp;</td></tr> 
<tr><td>&nbsp;</td></tr> 


<tr> 

<td><?php echo CHtml::submitButton('Submit'); ?> </td> 


</tr> 

<?php echo CHtml::endForm(); ?> 
</tr> 
</table> 


</div> 
    </td> 

</table> 


<!--</div> 
</div>--> 
+0

非常好的做法..保存我的一天。 – 2014-05-26 09:51:35