2017-04-10 5 views
0

プリペアドステートメントを使用してバルク値を挿入していて、値を割り当てて実行しても、実行に時間がかかり、実行制限を超えています。ここでPHP PDO Insert実行時間を超えた文

は私のコードです:

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ループ内であればループの中で行われています。また、1回の実行でも120秒の実行時間を超えます。

+0

ここでいくつのレコードを話していますか?これは適切な一括挿入ではなく、1,000レコードごとに1つのステートメントではなく、すべてのステートメントを実行しています。 – Augwa

+0

PDOを使用して一括挿入しようとしない理由 –

+0

通常最大10件のレコードしかありません –

答えて

0

これはあなたの問題であるが挿入され、単一のクエリで実行する必要があります。この条件が真であれば、$ countをインクリメントするだけです。つまり、おそらく無限ループになっています。

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

これを代わりに実行すると、$ countは常に増分されます。

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

ありがとうございます!これは私の問題を解決しました。 –

関連する問題