@9StarRu

Как обновить или записать данные в базу mysql через подготовленные запросы и odku?

Записываю данные в базу следующим образом:

<?php
require_once 'connection.php'; // подключаем скрипт

// Создание соединения
$conn = new mysqli($servername, $username, $password, $database);
// Проверка соединения
if ($conn->connect_error) {
   die("Ошибка подключения: " . $conn->connect_error);
}
        $up_date = date('Y-m-d\TH:i:s');

// Подготовить и связать
$stmt = $conn->prepare("INSERT INTO offer (affiliate, date, day_sales, description, image, item_id, price_total, rate, sales, sales_per_day, timer, title, totalPartners, totalReward, up_date, user_fullname, user_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

on duplicate key update affiliate = '116', day_sales = '11000'");

// on duplicate key update VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");


$stmt->bind_param("isissiiiiissiissi", $affiliate, $date, $day_sales, $description, $image, $item_id, $price_total, $rate, $sales, $sales_per_day, $timer, $title, $totalPartners, $totalReward, $up_date, $user_fullname, $user_id);


// Установить параметры и выполнить
$affiliate = "1"; 
$date = "$up_date"; 
$day_sales = "1"; 
$description = "Феодал системс"; 
$image = "Федор"; 
$item_id = "1111"; 
$price_total = "1"; 
$rate = "1"; 
$sales = "1"; 
$sales_per_day = "1"; 
$timer = "$up_date"; 
$title = "Федор"; 
$totalPartners = "1"; 
$totalReward = "1"; 
$up_date = "$up_date"; 
$user_fullname = "Федор"; 
$user_id = "777";
$stmt->execute();
echo "Успешно созданы новые записи";

// Закрыть связь
$stmt->close();
// Закрыть подключение
$conn->close();

?>


В базу пишется уникальный id записи (AUTO_INCREMENT) и уникальный item_id.

Мне необходимо в цикле проверять наличие записи в базе по ее уникальному $item_id и если она есть, то обновлять ее, если записи нет, то добавлять ее.

Необходимо сразу делать
insert ... on duplicate key update ...
без предварительного поиска который вставляет запись если ее нет и изменяет - если она есть.

Пробовал адаптировать свой код под этот ответ но не получилось корректно настроить on duplicate key update VALUES.

on duplicate key update VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
не работает.

Меня устроило бы и это
on duplicate key update affiliate = '116', day_sales = '11000'");


но как в значения подставлять нужные данные $affiliate, $day_sales и т.д.
on duplicate key update affiliate = '$affiliate', day_sales = '$day_sales'");
не работает.

Помогите, пожалуйста.
  • Вопрос задан
  • 70 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
ON DUPLICATE KEY UPDATE `affilate` = VALUES(`affilate`), `day_sales` = VALUES(`day_sales`)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@9StarRu Автор вопроса
Rsa97, если нужно всю строку обновить, так и чередовать через запятую или есть упрощенный вариант?
ON DUPLICATE KEY UPDATE `affilate` = VALUES(`affilate`), `day_sales` = VALUES(`day_sales`), `description` = VALUES(`description`) И.Т.Д.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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