MySQL изменяет таблицу изменения столбца ошибки при изменении строки

Этот вопрос, возможно, где-то задавали, но я не могу найти его после долгих поисков.

У меня есть основной вопрос о том, как я могу предотвратить выполнение последнего оператора SQL в моем коде ниже, если это вызвало изменение какой-либо строки / данных в таблице.

$query = 'SELECT pdt_code FROM `Products`';
$stmt = $con->query($query);
while ($obj = $stmt->fetch()) {
$pdt_code[] = $obj['pdt_code'];
}

$args = implode(',',
array_map(function($el) {
return '('.implode(',', $el).')';
},
array_chunk(array_fill(0, count($pdt_code), '?'), count($pdt_code))
)
);

$query = 'ALTER TABLE `MapProduct` CHANGE product_code product_code SET '.$args.' COLLATE utf8mb4_unicode_ci NOT NULL';
$stmt = $con->prepare($query);
$stmt->execute($pdt_code); // how do I prevent this line from executing if it causes the data in table `MapProduct` to change?

Я пытаюсь выполнить это из PHP, где я запрашиваю другую таблицу для обновления кодов продуктов и обновляю SET() соответственно. Однако у меня был ужасный опыт потери всех моих данных, потому что обновление не было выполнено должным образом, и все данные в product_code был уничтожен.

0

Решение

Хотя тип данных mysql SET можно использовать для ограничения списка вводимых значений. Тем не менее, он не является гибким и требует изменения таблицы для обновления списка значений. Если вам часто приходится это делать — и если вы создаете для этого функциональность, то вам нужно делать это часто — тогда тип данных SET просто не для вас.

Я бы создал отдельную таблицу для типов продуктов и просто связал бы эту таблицу с внешним ключом из вашей таблицы mapproduct. Таким образом, добавление нового типа продукта в разрешенный список требует оператора вставки.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]