PDA

View Full Version : مشکل عجیب با PDO در حلقه !



680100
چهارشنبه 27 خرداد 1394, 09:23 صبح
سلام وقت بخیر
من تو پروژه ای که دارم می نویسم به یه مشکل عجیب برخوردم !

این قسمت پروژه به اینصورت هست که برای اولین کار میره یک لیست از مقادیر میگیره
مقادیر به فرض :




ID


1


2


3


4



حالا از این مقادیری که به دست آمده رو میندازیم تو یه foreach که متونیم ID رو بکشیم بیرون

حالا داخل این loop باید یه کاری انجام بشه
داخل این loop دوباره یک دستور کوئری دیگه ای داریم که بیاد بررسی کنه که این ID بدست آمده داخل این کوئری دوم هست یا نه که اگر ID وجود نداشته باشه بیاد این ID بدسته آمده رو درج کن تو یه جدولی .
تا اینجا به صورت منطقی مشکلی نداره
اما وقتی که شرط برقرار بود و می خواد درج کنه یک ID رو یک بار ، گاهی اوقات دوبار گاهی اوقات سه بار درج میکنه !!!!!!

برای درک بهتر سورس رو میزارم بررسی کنید که بهتر راهنمایی کنید





function core_update_temp_camp($pdo){

$get_list_camp = $pdo->prepare("select * from tbl_campaigns where (status = 1) and (flag = 1) and (total >= 100) and ((tbl_campaigns.banner468 != '') or (tbl_campaigns.banner240 != '') or (tbl_campaigns.banner125 != '')) ORDER BY total desc;");

$get_list_camp->execute();

$list = $get_list_camp->fetchAll();

$daily_tmp = 0;

$flag = 1;

foreach ($list as $value) {

$id_camp = $value['id'];

$daily = $value['daily'];

$get_list_all = $pdo->prepare("SELECT * FROM tbl_adslog_temp

WHERE (tbl_adslog_temp.id_camp = :id_camp) and (tbl_adslog_temp.dates_ymd = :dates_ymd);");
$get_list_all->execute(array(':id_camp'=>$id_camp,':dates_ymd'=>date('Y/m/d')));

$list_all = $get_list_all->fetchAll();


if((count($list_all) < 1)){


$insert_temp_camp = $pdo->prepare("INSERT INTO tbl_adslog_temp (`id_camp`, `daily`, `daily_tmp`, `dates`, `dates_ymd`, `flag`)

VALUES (:id_camp, :daily, :daily_tmp, :dates, :dates_ymd, :flag);");


$param = array(

':id_camp' => $id_camp,

':daily' => $daily,

':daily_tmp' => $daily_tmp,

':dates' => time(),

':dates_ymd' => date('Y/m/d'),

':flag' => $flag,

);



$insert_temp_camp->execute($param);



}





}



}








ممنون