Я вставляю некоторые значения из json-декодированного ответа в мою базу данных, но некоторые значения каким-то образом вставляются не только в свои собственные строки, но и в другие строки, у которых есть некоторые из этих значений.Так, например, если у строки было свое собственное аудио, оно сохраняет свое аудио, но оно также получает видео / фото / граффити некоторых других строк.Тем не менее, те сообщения, которые не имеют вложений, оставляют эти поля пустыми.Это очень странное поведение, и я уже потерялся в этих циклах.
foreach ( $response->posts as $key => $element ) {
$comment_id = $element->id;
$user_id = $element->from_id;
$usersget = $var_hidden_from_this_example;
$user_name = $var_hidden_from_this_example_2;
$user_photo = $var_hidden_from_this_example_3;
$comment_text = $response->posts[$key]->text;
$comment_date = date('Y-m-d H:i:s', $response->posts[$key]->date);
if ( !isset ($element->attachments) ) {
$photo = $graffiti = $video = $audio = null;
}
else {
foreach ( $element->attachments as $key_att => $attachment ) {
if ( $attachment->type == 'photo' ) {
if ( $attachment->photo->album_id == $example_only ) {
$graffitis = array();
$graffitis[] = $attachment->photo->$example_var;
}
else {
$photos = array();
$photos[] = $attachment->photo->$example_var;
}
}
if ( $attachment->type == 'video' ) {
$videos = array();
$videos[] = $example_var2;
}
if ( $attachment->type == 'audio' ) {
$audios = array();
$audios[] = $example_var3;
}
}
if ( isset ($photos) ) {
$photo = implode('\n', $photos);
}
if ( isset ($graffitis) ) {
$graffiti = implode('\n', $graffitis);
}
if ( isset ($videos) ) {
$video = implode('\n', $videos);
}
if ( isset ($audios) ) {
$audio = implode('\n', $audios);
}
}
$data = [
'comment_id' => $comment_id,
'user_id' => $user_id,
'user_name' => $user_name,
'user_photo' => $user_photo,
'url' => $referer,
'comment_text' => $comment_text,
'comment_date' => $comment_date,
'photo' => $photo,
'graffiti' => $graffiti,
'video' => $video,
'audio' => $audio,
];
$sql = "INSERT INTO level_1 (comment_id, user_id, user_name, user_photo, url, comment_text, comment_date, photo, graffiti, video, audio) VALUES (:comment_id, :user_id, :user_name, :user_photo, :url, :comment_text, :comment_date, :photo, :graffiti, :video, :audio)";
$pdo->prepare($sql)->execute($data);
}
Другими словами, значения photo
, graffiti
, video
и audio
вставляются нетолько в соответствующих строках, но одинаковые значения вставляются во все строки таблицы, у которых не было своих собственных значений такого типа (кроме строк, у которых не было ни одной из них - они остаются пустыми, как и ожидалось).