Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.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_Import_Insert Update - Fatal编程技术网

php条件混合插入和从csv更新mysql

php条件混合插入和从csv更新mysql,php,mysql,csv,import,insert-update,Php,Mysql,Csv,Import,Insert Update,我有一组csv文件要添加或更新几个表。csv数据是旧记录(可能已更改)和新记录的混合 这意味着在导入期间,我必须检查该记录是否存在——如果存在则更新,如果不存在则插入。为了增加趣味性,独特的列主要是guid格式,并且不是列表中的第一列 最后,我希望使用一个文件名数组和每个文件名中使用的列来搜索和迭代文件名,以实现导入的自动化 因此,我一直在调整搜索中发现的想法,并成功地使插入生效,但我无法构建有效的更新指令 在代码中,我回显mysql,这样我就可以看到(并通过phpAdmin检查)发生了什么。我

我有一组csv文件要添加或更新几个表。csv数据是旧记录(可能已更改)和新记录的混合

这意味着在导入期间,我必须检查该记录是否存在——如果存在则更新,如果不存在则插入。为了增加趣味性,独特的列主要是guid格式,并且不是列表中的第一列

最后,我希望使用一个文件名数组和每个文件名中使用的列来搜索和迭代文件名,以实现导入的自动化

因此,我一直在调整搜索中发现的想法,并成功地使插入生效,但我无法构建有效的更新指令

在代码中,我回显mysql,这样我就可以看到(并通过phpAdmin检查)发生了什么。我只是无法从$settin中获取任何内容

$con= mysql_connect("my_connection_details");
mysql_select_db('issuetest');
function csv_file_to_mysql_table($source_file, $target_table, $fieln, $max_line_length=0) {
    if (($handle = fopen("$source_file", "r")) !== FALSE) {
        $columns = fgetcsv($handle, $max_line_length, ",");
        $key = array_search($fieln, $columns);
        foreach ($columns as &$column) {
            $column = str_replace(".","",$column);
        }
        $insert_prefix = "INSERT INTO $target_table (".join(",",$columns).")\nVALUES";
        $update_prefix = "UPDATE $target_table SET ";
        while (($data = fgetcsv($handle, $max_line_length, ",")) !== FALSE) {
            while (count($data)<count($columns)){
            array_push($data, NULL);
            }
            $sql="SELECT $fieln FROM  $target_table WHERE $fieln='$data[$key]'";
            if(mysql_num_rows(mysql_query($sql))=='0'){
                $query = "$insert_prefix (".join(",",quote_all_array($data)).");";
                }else{
                $settin='';
                $i='0';
                reset($data);
                reset ($columns);
                while (count($data)<count($columns)){
                    if($i=='0'){$settin.="$columns[$i] ='".$data[$i]."'";   
                        }else{$settin.=",$columns[$i]='".$data[$i]."'"; 
                    }
                    $i++;
                }
                $query = "$update_prefix $settin  WHERE $fieln='$data[$key]';";
            }
            echo $query;
        }
        fclose($handle);
    }
}

function quote_all_array($values) {
    foreach ($values as $key=>$value)
    if (is_array($value))
    $values[$key] = quote_all_array($value);
    else
    $values[$key] = quote_all($value);
    return $values;
}

function quote_all($value) {
    if (is_null($value))
    return "NULL";
    $value = "'" . mysql_real_escape_string($value) . "'";
    return $value;
} 
//$fiel is name of field to check 
//fileN ia name of csv file
//$tabname is table to insert into
$fiel='my_field';
$tabname='my_table';
$fileN='my_csv';

$fg=csv_file_to_mysql_table($fileN,$tabname,$fiel);
$con=mysql\u connect(“我的连接详细信息”);
mysql_select_db('issuetest');
函数csv\u file\u to\u mysql\u table($source\u file、$target\u table、$fieln、$max\u line\u length=0){
if(($handle=fopen($source\u file,“$r”))!==FALSE){
$columns=fgetcsv($handle,$max\u line\u length,“,”);
$key=array\u search($fieln,$columns);
foreach($columns as&$column){
$column=str_replace(“.”,“”,$column);
}
$insert\U prefix=“插入$target\U表格(“.join”(“,”,$columns)。”)\n值”;
$update\u prefix=“更新$target\u表集”;
while(($data=fgetcsv($handle,$max\u line\u length,“,”)!==FALSE){

而(count($data)我不明白这是怎么回事

while(count($data)<count($columns))

while(count($data)你有没有考虑过
insert…on duplicate key update
?谢谢你-这是一件非常复杂的事情,而且由于你在凌晨工作,所以有点精神错乱-事实上,我需要它
$min= min(count($data),count($columns));
    while($i<$min)