【问题标题】:PHP PDO Insert Statement exceeding execution timePHP PDO 插入语句超过执行时间
【发布时间】:2017-09-05 01:19:46
【问题描述】:

我正在使用准备好的语句插入批量值,分配值和执行是在循环中完成的,但它花费的时间太长并且超出了执行限制。

这是我的代码:

if(isset($_GET['mov_id']) && isset($_GET['season']))
{
$id= $_GET['mov_id'];
$season = $_GET['season'];
$stmt = $DB_con->prepare("SELECT * FROM `mov_movies` where moviesID =:id");
$stmt->execute(array(':id'=>$id));
$row=$stmt->fetch(PDO::FETCH_ASSOC);
$imdbID = $row['IMDBid'];


if(isset($_POST['btn-addmovie']))
{
$episodes = trim($_POST['tepisodes']);

    $name = "";
     $episode = "";
     $DOR = "";
     $IMDB = "";
     $drive = "";
     $cdn = "";

     $stmt = $DB_con->prepare("DELETE FROM `mov_season` where movId =:id");
     $stmt->execute(array(':id'=>$id));
     $count = 1;

    $stmt = $DB_con->prepare("INSERT INTO `mov_season` (`movId`, `season`, `episode`, `releaseDate`, `IMDB`, `driveLink`, `cdnLink` , `title`) VALUES (:id, :season, :episode,:releaseDate, :IMDB,:drive,:cdn,:name)");
    $stmt->bindparam(":id", $id);
       $stmt->bindparam(":season", $season);
       $stmt->bindparam(":episode", $episode);  
       $stmt->bindparam(":releaseDate", $DOR);  
       $stmt->bindparam(":IMDB", $IMDB ); 
       $stmt->bindparam(":drive", $drive ); 
       $stmt->bindparam(":cdn", $cdn );
       $stmt->bindparam(":name", $name);
     while($count < $episodes){

     $name = trim($_POST['name'.$count]);
     $episode = trim($_POST['episode'.$count]);
     $DOR = trim($_POST['DOR'.$count]);
     $IMDB = trim($_POST['imdb'.$count]);
     $drive = trim($_POST['drive'.$count]);
     $cdn = trim($_POST['cdn'.$count]);

     if(($drive != "") || ($cdn = "")){



       $stmt->execute();

       $count++;
     }




    }
     $success = "Successfully Updated!";



 }
 }

语句发生在 while 循环内的 if 循环中。即使只执行一次,它的执行时间也会超过 120 秒。

【问题讨论】:

  • 我们在这里讨论了多少条记录?此外,这不是正确的批量插入,您是在每条记录执行一条语句,而不是每 1,000 条记录执行一条语句。
  • 为什么不尝试使用 PDO 进行批量插入
  • 通常最多只有10条记录

标签: php mysql pdo


【解决方案1】:

这是你的问题。如果此条件为真,您只会增加 $count,这意味着您可能处于无限循环中。

if(($drive != "") || ($cdn = "")){
    $stmt->execute();
    $count++;
}

改为这样做,因此 $count 始终递增。

if(($drive != "") || ($cdn = "")){
    $stmt->execute();
}
$count++;

【讨论】:

    【解决方案2】:

    尝试使用批量插入。在这种情况下,您必须执行将插入多条记录的单个查询

    PDO Prepared Inserts multiple rows in single query

    【讨论】:

      猜你喜欢
      • 2012-12-16
      • 1970-01-01
      • 2014-12-14
      • 1970-01-01
      • 1970-01-01
      • 2013-05-19
      • 1970-01-01
      • 2012-05-05
      • 2017-01-09
      相关资源
      最近更新 更多