Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php csv文件上传和更新mysql数据库_Php_Mysql_Csv - Fatal编程技术网

Php csv文件上传和更新mysql数据库

Php csv文件上传和更新mysql数据库,php,mysql,csv,Php,Mysql,Csv,我对php非常陌生。我正在使用以下代码打开csv文件并更新我的数据库。我需要检查csv文件第一行第一列的值。如果它匹配“一些文本1”,那么我需要运行代码1,如果它是“一些文本2”,则运行代码2,否则运行代码3。我可以使用if-else条件,但由于我使用while循环,它失败了。有人能帮我吗 $handle = fopen($file_tmp,"r"); while(($fileop = fgetcsv($handle,",")) !== false) {

我对php非常陌生。我正在使用以下代码打开csv文件并更新我的数据库。我需要检查csv文件第一行第一列的值。如果它匹配“一些文本1”,那么我需要运行代码1,如果它是“一些文本2”,则运行代码2,否则运行代码3。我可以使用if-else条件,但由于我使用while循环,它失败了。有人能帮我吗

    $handle = fopen($file_tmp,"r");
        while(($fileop = fgetcsv($handle,",")) !== false) 
        {
                    // I need to check here
        $companycode =  mysql_real_escape_string($fileop[0]);
        $Item = mysql_real_escape_string($fileop[3]);
        $pack = preg_replace('/[^A-Za-z0-9\. -]/', '', $fileop[4]);
        $lastmonth = mysql_real_escape_string($fileop[5]);
        $ltlmonth = mysql_real_escape_string($fileop[6]);
        $op = mysql_real_escape_string($fileop[9]);
        $pur = mysql_real_escape_string($fileop[10]);
        $sale = mysql_real_escape_string($fileop[12]);
        $bal = mysql_real_escape_string($fileop[17]);
        $bval = mysql_real_escape_string($fileop[18]);
        $sval = mysql_real_escape_string($fileop[19]);

        $sq1 = mysql_query("INSERT INTO `sas` (companycode,Item,pack,lastmonth,ltlmonth,op,pur,sale,bal,bval,sval) VALUES ('$companycode','$Item','$pack','$lastmonth','$ltlmonth','$op','$pur','$sale','$bal','$bval','$sval')");
    }

也许你在找一个转换语句

案例1:您必须为每一行触发不同的操作:

$handle = fopen($file_tmp,'r');
while(FALSE!==($fileop = fgetcsv($handle,','))) {
    switch($fileop[0]) {
        case 'some text 1':
            // do thing 1
            $sql = '...';
            break;
        case 'some text 2':
            // do thing 2
            $sql = '...';
            break;
        case 'some text 3':
            // do thing 3
            $sql = '...';
            break;
        default:
            $sql = FALSE;
    } // switch
} // while

if (FALSE!==$sql) {
    // now go on with the $sql statement and execute it using `mysqli` or `PDO`...
} // if
说明:您可以检查所读取的每一行的第一列(
$fileop[0]
),并决定触发哪个操作


案例2:您必须为每个文件启动不同的操作:

$handle = fopen($file_tmp,'r');
$action = NULL;
while(FALSE!==($fileop = fgetcsv($handle,','))) {
    if (is_null($action)) {
        switch($fileop[0]) {
            case 'some text 1': $action = 1; break;
            case 'some text 2': $action = 2; break;
            case 'some text 3': $action = 3; break;
            default:            $action = FALSE;
        } // switch
    } // if
    switch ($action) {
        case 1:
            $sql = '...';
            // prepare statement, use $fileop as array of attributes for the statement
            break;
        case 2:
            $sql = '...';
            // prepare statement, use $fileop as array of attributes for the statement
            break;
        case 2:
            $sql = '...';
            // prepare statement, use $fileop as array of attributes for the statement
            break;
    } // switch
} // while
说明:检查您读取的第一行中的第一列(
$fileop[0]
)。只有当
$action
仍为
NULL
时,才能执行此操作。一旦设置了
$action
,您就可以离开它。现在,您在处理步骤的开始定义了一次
$action
,并且可以对读取的每一行作出反应



一般来说,在这里使用异常来处理意外的第一列值是值得的,这样您就可以在这种情况下跳过整个文件的读取…

为什么不直接加载到mysql

load data local infile 'filename.csv' into table tblname
fields terminated by ','
enclosed by '"'
lines terminated by '\n'
(field1, field1, field1,...);

停止使用长期折旧的mysql扩展。改用准备好的语句,这样你就不需要所有的转义命令,你的代码也就安全了。你说的“既然我在使用while循环,它就失败了”是什么意思?我不能在这里发现任何条件(
如果
),好的,我也在学习PDO。有没有办法做我想做的事asked@arkascha我没有提到你的问题中的if引文:“我可以使用if-else条件”你的代码没有帮助。让我再解释一遍。我有两个不同的csv文件。File1在第一个单元格中包含text1。File2有text2。上载csv文件时,必须检查第一行第一列的值,如果该值为text1且上载的文件为File1,则应在循环代码将数据插入数据库时运行。您建议的代码检查每一行$fileop[0],这确实是我理解您问题的方式。我添加了第二个案例,希望能引导您进入正确的方向…将csv上传到服务器,然后将其加载到mysql?