У меня есть массив с разными идентификаторами, которые я получаю из своей базы данных.
$fotos_temp_list=explode(",",$fotos_temp["fa_id"][0]);
Result: fa_id => 15,16,17,18
Теперь я хочу обновить все строки внутри другой таблицы с идентификаторами 15,16,17,18 и вставить конкретный '$id'
в столбец с именем 'fa_ev_id'
. В этом примере я установил:
$id=1;
Теперь мой цикл foreach выглядит следующим образом:
foreach ($fotos_temp_list as $key) {
UPDATE images SET fa_ev_id = Concat(fa_ev_id , ',' ,'".$id."') where fa_id='".$key."' ";
}
Эта часть тоже работает. Каждая строка с моими идентификаторами (в моем примере: 15,16,17,18) обновляется.
Проблема. Когда я снова запустил цикл foreach, '$id'
будет снова сохранен внутри строки. Посмотреть здесь:
Вопрос: Как возможно, что я могу проверить, есть ли '$id'
уже внутри строки, и если да, то он пропускается? Вот что я пытался сделать:
foreach ($fotos_temp_list as $key) {
if (!in_array($id,$key)===true) {
UPDATE fotoalbum SET fa_ev_id = Concat(fa_ev_id , ',' ,'".$id."') where fa_id='".$key."'
}
}
Я думаю, что функция in_array
проверяет, есть ли '$id'
уже внутри '$key'
и если это правда, выполняется инструкция UPDATE. Поэтому я добавил '!in_array'
но он не работает. Кто-нибудь имеет представление о том, что я делаю неправильно? Я просто хочу проверить, находится ли '$id'
уже внутри моей строки базы данных, и если это так, он не должен снова вставлять '$id'
. Я ценю любые советы.
Функция in_array() в php принимает массив как свой второй параметр, в (! In_array ($ id, $ key) === true), https://www.w3schools.com/php/func_array_in_array.asp. Второй параметр $ key, переданный здесь, не является массивом.
Вы можете сохранить тип данных fa_ev_id как json и получить и json_decode значение, когда вы собираетесь выполнить обновление в поле, чтобы узнать, существует ли этот идентификатор $ id с помощью in_array(), или вы можете получить значения, expolode их для формирования массива а затем проверьте, существует ли она с помощью in_array().
in_array
.