0

私はphpに非常に慣れていません。次のコードを使用して csv ファイルを開き、データベースを更新しています。csv ファイルの最初の行から最初の列の値を確認する必要があります。「some text 1」に一致する場合は code1 を実行する必要があります。「some text 2」の場合は code2 を実行し、そうでない場合は code3 を実行します。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')");
    }
4

2 に答える 2

0

多分あなたはswitchステートメントを探していますか?

ケース 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で、処理ステップの開始時に 1 回定義し、読み取るすべての行に対して反応することができます。


一般に、これで例外を使用して予期しない最初の列の値を処理すると、そのような場合にファイル全体の読み取りをスキップできるようになる可能性があります...

于 2013-11-02T09:51:03.903 に答える
0

mysql に直接ロードしないのはなぜですか?

load data local infile 'filename.csv' into table tblname
fields terminated by ','
enclosed by '"'
lines terminated by '\n'
(field1, field1, field1,...);
于 2013-11-02T10:49:50.227 に答える