我非常喜欢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')");
}
答案 0 :(得分:0)
也许您正在寻找切换声明?
案例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 :(得分:0)
为什么不直接加载到mysql?
load data local infile 'filename.csv' into table tblname
fields terminated by ','
enclosed by '"'
lines terminated by '\n'
(field1, field1, field1,...);