プリペアドステートメントを使用してバルク値を挿入していて、値を割り当てて実行しても、実行に時間がかかり、実行制限を超えています。ここで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秒の実行時間を超えます。
ここでいくつのレコードを話していますか?これは適切な一括挿入ではなく、1,000レコードごとに1つのステートメントではなく、すべてのステートメントを実行しています。 – Augwa
PDOを使用して一括挿入しようとしない理由 –
通常最大10件のレコードしかありません –