Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Почему sql-запрос в цикле выполняется только 2 раза?

Почему sql-запрос в цикле выполняется только 2 раза?


     25.01.2021    дополнительные поля, запрос в бд, цикл    Общие вопросы по PHP, MySQL    152

вопрос
Есть доп.поле my_xf.
Необходимо в указанных id это доп.поле обновить.

Посдкажите, почему запрос выполняется только 2 раза.

for ($i = 1; $i <= 5; $i++) {
$id = $textAr_id[$i]; // массив конкретных {id-news}
     if($id) 
     {
	$get_xf = $db->super_query("SELECT xfields FROM ".PREFIX."_post WHERE id='$id'");
	$buildxf = explode("||", $get_xf['xfields']);
	foreach ($buildxf as $key => $value) {
	$buildxf[$key] = $db->safesql($value);
	}
	$newxf = "";
	$record = "my_xf|".$data; //вносим запись в доп.поле my_xf
	array_push($buildxf, $record);
	$newxf = implode("||", $buildxf);
	$q = $db->query("UPDATE ".PREFIX."_post SET xfields='$newxf' WHERE id='$id'");
	echo 'Ok! ';
     }
}

Заменял цикл for на forech. Ситуация с запросом UPDATE таже самая. Помогите!

foreach ($textAr_id as $key => $id) {
     //code
}


При этом echo выведет 5 раз, а запросы обработаны только первые 2.

Ответа пока нет


4 комментария

www_kot_www
Юзер

www_kot_www - 25 января 2021 18:47 -

Убрал лишнее. Конкретно циклы и запросы вот:


for ($i = 1; $i <= 5; $i++) {
$id = $textAr_id[$i];
if($id) {
  $get_xf = $db->super_query("SELECT xfields FROM dle_post WHERE id='$id'");
  $q = $db->query("UPDATE dle_post SET xfields='$newxf' WHERE id='$id'");
  echo 'Ok! ';
  }
}

// or foreach

foreach ($textAr_id as $key => $id) {
  $get_xf = $db->super_query("SELECT xfields FROM dle_post WHERE id='$id'");
  $q = $db->query("UPDATE dle_post SET xfields='$newxf' WHERE id='$id'");
  echo 'Ok! ';
}

www_kot_www
Юзер

www_kot_www - 25 января 2021 20:58 -

Оказалось что мой код рабочий, просто обновилось первые 2 новости на сайте, а 3-4-5 обновятся через очистку кеша.
Может кто подскажет как я могу добавить php-код очистки кеша на сайте после завершения цикла? Буду благодарен.
Нигде не нашел.

Pringles
Юзер

Pringles - 26 января 2021 01:04 -

Правильнее в вашем случае наверное будет так:
$id_implode = implode("', '", $textAr_id);

$get_xf = $db->super_query("SELECT id, xfields FROM dle_post WHERE id IN ('{$id_implode}')", true);
foreach($get_xf as $item) {
$newxf = '';
$db->query("UPDATE dle_post SET xfields='$newxf' WHERE id = '{$item['id']}'");
  echo 'Ok! ';
}
clear_cache(['news_']);

www_kot_www
Юзер

www_kot_www - 27 января 2021 22:57 -

Спасибо, вы дали ответ на мой вопрос. Спасибо за код. Буду пробовать.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх