通过存储过程在mysql中保存数据

时间:2015-09-20 20:34:05

标签: php mysql stored-procedures timeout

我有一个必须每月更新的表,因为我在服务器上传文本文件并将其保存在临时表中,以下代码显示:

$result_emp = "LOAD DATA LOCAL INFILE'".$myFile_emp."' INTO TABLE infemptemp COLUMNS TERMINATED BY ','";

然后成功更新并在" infemptem"中插入新数据表,我应该比较主表的数据" infemp"那些有旧数据的" infemptemp"有新数据,为此,我写下以下代码:

$viwe_emp =mysqli_query($conn,"select * from infempsame where 1");
              $NumRows_emp=mysqli_num_rows($viwe_emp);
              //echo $NumRows_vam;
              $i=0;

              while(($row=$viwe_emp->fetch_assoc())!=NULL)
                {
                $prsid1=$row['PrsID'];
                $AccID1=$row['AccID'];
                $numid1=$row['NumID'];
                $sql2="select * from infempsame  where prsID='".$prsid1."';";
                if (mysqli_query($conn,$sql2))
                    {
                    $sql2_update="UPDATE `infemp` SET AccID='".$AccID1."',NumID='".$numid1."' WHERE prsID='".$prsid1."';";
                     if(mysqli_query($conn,$sql2_update))
                     {
                     $i+=1;
                     }
                    }// end   if (mysqli_query($conn,$sql2))

          }// end while insert new fields of infvam

注意代码并在" infempsame"在我的数据库上的表,当我想要更新" infemp"表,浏览器发生超时。 我想如果通过程序写上面的代码,我的问题就解决了。 这是真的吗?我如何编写程序并致电或使用它? 最诚挚的问候。

1 个答案:

答案 0 :(得分:1)

存储过程太过分了。有一种更好的隐藏方式,但在manual

中只是一个非常简短的提及
  

您还可以执行覆盖多个表的UPDATE操作。   但是,您不能将ORDER BY或LIMIT与多表一起使用   UPDATE。 table_references子句列出了涉及的表   加入。其语法在第13.2.9.2节“JOIN语法”中描述。这里   是一个例子:

UPDATE items,month SET items.price=month.price WHERE
items.id=month.id;

因此,您可以编写一个简单的查询来摆脱这样的PHP脚本。

UPDATE infemp, infemptemp 
    SET infemp.AccID=infemptemp.AccID,
    infemp.NumID=infemptemp.numID 
WHERE infemp.prsID=infemptemp.prsID;

如果prsID列上有索引,则应该很快完成。