导入 Excel 文件时更新重复条目 - php mysql
Update on dulipcate entry while Import Excel file - php mysql
我需要在 import excel file 时检查值是否插入数据库,如果它已经在数据库中有值那么它应该得到更新。
下面是producttab table数据库中的值
prdid | prdname
00A | prd1
00B | prd2
00C | prd3
00D | prd4
下面是EXCELFILE数据
prdid | prdname
00A | prdnew
00B | prd2new
00E | prd8
00H | prd9
因此,如果我上传以上 excel 文件,
00A , 00B 应该在 producttab table 中得到更新,因为它们已经在那里了...但是 00E,00H 应该得到插入
*以下是我尝试过的,值正在正确插入
只有更新没有发生,我的意思是 IF..ELSE 条件是完美的,只有更新不正确 *
if(isset($_POST["Upload"]))
{
$fileinfo = pathinfo($_FILES["uploadFile"]["name"]);
$filetype = $_FILES["uploadFile"]["type"];
$remark = NULL;
//Validate File Type
if(strtolower(trim($fileinfo["extension"])) != "csv")
{
$_SESSION['msg_r'] = "Please select CSV file";
header("location:importfile.php");
exit;
}
else
{
$file_path = $_FILES["uploadFile"]["tmp_name"];
}
$row = 0;
$tempFileName = time().".csv";
if ( is_uploaded_file( $file_path ) ) {
$fileCopied = copy( $file_path , $tempFileName);
if (($handle = fopen($tempFileName, "r")) !== FALSE) {
fgetcsv($handle);
while (($data = fgetcsv($handle, 6000, ",")) !== FALSE) {
$num = count($data);
for ($c=0; $c < $num; $c++) {
$col[$c] = $data[$c];
}
$col1 = $col[0]; // prdid
$col2 = $col[1]; // prdname
$sql = "SELECT prdid FROM producttab WHERE prdid = '".$col1."' ";
$query = db_query($sql);
$pfetech = db_fetch($query);
// ABOVE select QUERY IS PERFECT , it taking me to if conditions
if($col1 == $pfetech['prdid']){
// only below update not happening
$sqlup = "UPDATE producttab
SET prdid = ".$pfetech['prdid'].",
prdname = ".$col2." ";
$sqlup .= " WHERE prdid = ".$pfetech['prdid']." ";
$resultsqlupdate = mysql_query($sqlup);
}else{
$query = "INSERT INTO producttab(prdid,prdname) VALUES('".$col1."','".$col2.")";
$s = mysql_query($query);
}
}
fclose($handle);
}
echo "<center>File data imported to database!!</center>";
}
}
}
下面是更新查询的print/echo,
update producttab set prdname='prdnew' WHERE prdid='00A'
update producttab set prdname='prd2new' WHERE prdid='00B'
prdname 的值根据 excel 文件正确显示....只有更新没有发生....
您可以使用存在查询来检查数据库中是否存在,以下是查询
select exists(select 1 from producttab where prdid='".$col1."');
如果它退出,它会给你 1,如果不退出,它会给你 0 然后在 if else 条件下做进一步的插入或更新
并且只设置一件事而不是像这样的其他事情
"UPDATE producttab
SET prdname = ".$col2."
$sqlup .= " WHERE prdid = ".$pfetech['prdid']." ";
哦抱歉,您需要更新 prdname 而不是 prdid。
编辑了我的答案
ps。
你应该为此使用 mysql import from csv query
这里是 link 寻求帮助
http://www.mysqltutorial.org/import-csv-file-mysql-table/
我需要在 import excel file 时检查值是否插入数据库,如果它已经在数据库中有值那么它应该得到更新。
下面是producttab table数据库中的值
prdid | prdname
00A | prd1
00B | prd2
00C | prd3
00D | prd4
下面是EXCELFILE数据
prdid | prdname
00A | prdnew
00B | prd2new
00E | prd8
00H | prd9
因此,如果我上传以上 excel 文件,
00A , 00B 应该在 producttab table 中得到更新,因为它们已经在那里了...但是 00E,00H 应该得到插入
*以下是我尝试过的,值正在正确插入 只有更新没有发生,我的意思是 IF..ELSE 条件是完美的,只有更新不正确 *
if(isset($_POST["Upload"]))
{
$fileinfo = pathinfo($_FILES["uploadFile"]["name"]);
$filetype = $_FILES["uploadFile"]["type"];
$remark = NULL;
//Validate File Type
if(strtolower(trim($fileinfo["extension"])) != "csv")
{
$_SESSION['msg_r'] = "Please select CSV file";
header("location:importfile.php");
exit;
}
else
{
$file_path = $_FILES["uploadFile"]["tmp_name"];
}
$row = 0;
$tempFileName = time().".csv";
if ( is_uploaded_file( $file_path ) ) {
$fileCopied = copy( $file_path , $tempFileName);
if (($handle = fopen($tempFileName, "r")) !== FALSE) {
fgetcsv($handle);
while (($data = fgetcsv($handle, 6000, ",")) !== FALSE) {
$num = count($data);
for ($c=0; $c < $num; $c++) {
$col[$c] = $data[$c];
}
$col1 = $col[0]; // prdid
$col2 = $col[1]; // prdname
$sql = "SELECT prdid FROM producttab WHERE prdid = '".$col1."' ";
$query = db_query($sql);
$pfetech = db_fetch($query);
// ABOVE select QUERY IS PERFECT , it taking me to if conditions
if($col1 == $pfetech['prdid']){
// only below update not happening
$sqlup = "UPDATE producttab
SET prdid = ".$pfetech['prdid'].",
prdname = ".$col2." ";
$sqlup .= " WHERE prdid = ".$pfetech['prdid']." ";
$resultsqlupdate = mysql_query($sqlup);
}else{
$query = "INSERT INTO producttab(prdid,prdname) VALUES('".$col1."','".$col2.")";
$s = mysql_query($query);
}
}
fclose($handle);
}
echo "<center>File data imported to database!!</center>";
}
}
}
下面是更新查询的print/echo,
update producttab set prdname='prdnew' WHERE prdid='00A'
update producttab set prdname='prd2new' WHERE prdid='00B'
prdname 的值根据 excel 文件正确显示....只有更新没有发生....
您可以使用存在查询来检查数据库中是否存在,以下是查询
select exists(select 1 from producttab where prdid='".$col1."');
如果它退出,它会给你 1,如果不退出,它会给你 0 然后在 if else 条件下做进一步的插入或更新
并且只设置一件事而不是像这样的其他事情
"UPDATE producttab
SET prdname = ".$col2."
$sqlup .= " WHERE prdid = ".$pfetech['prdid']." ";
哦抱歉,您需要更新 prdname 而不是 prdid。 编辑了我的答案
ps。 你应该为此使用 mysql import from csv query 这里是 link 寻求帮助 http://www.mysqltutorial.org/import-csv-file-mysql-table/