【发布时间】:2016-10-17 13:16:50
【问题描述】:
我需要检查在 import excel file 时是否在数据库中插入值,如果它已经在数据库中具有值,那么它应该得到更新。
下面是数据库中的 producttab 表值
prdid | prdname
00A | prd1
00B | prd2
00C | prd3
00D | prd4
以下是EXCEL FILE数据
prdid | prdname
00A | prdnew
00B | prd2new
00E | prd8
00H | prd9
所以如果我上传上面的excel文件,那么,
00A , 00B 应该在 producttab 表中获得更新,因为它们已经存在于那里......但是 00E,00H 应该得到插入
*下面是我尝试过的,价值正在正确插入 只有 UPDATE 没有发生,我的意思是 IF..ELSE 条件是完美的,只有 UPDATE 不正常 *
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>";
}
}
}
下面是 UPDATE 查询的打印/回显,
update producttab set prdname='prdnew' WHERE prdid='00A'
update producttab set prdname='prd2new' WHERE prdid='00B'
prdname 的值根据 excel 文件正确显示 .... 只有更新没有发生 ....
【问题讨论】:
-
这里的任何人......请告诉我有什么问题......
-
您可以使用存在查询,然后您可以根据 if 决定更新或插入。
-
你的意思是IN CLAUSE ?? ...但是我怎么能像 $col1 一样价值... 00A00B ...一起 ...你能帮我吗
-
您可以使用 INSERT IGNORE 子句,并在标识行的列上创建唯一索引。
-
嗨,Afshan,感谢您的回复,但我只想更新那个 prdid .. 以备将来使用...那是当我在数据库中插入值以及更新时...等许多记录...因此进行更新
标签: php mysql excel sql-update insert-update