この質問はおそらくどこかで尋ねられたかもしれませんが、多くの検索の後でそれを見つけることができないようです。行が変更された場合、MySQL alter table changeカラムスローエラー
テーブルの行/データが変更された場合、以下のコードで最後の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
のすべてのデータが消去されたため、私はすべてのデータを失うという恐ろしい経験をしました。
なぜ、ALTER TABLEを自動化する必要がありますか? –
@davidstrachan製品が格納されているテーブルは時々変更されるため、それに応じてSETが更新されなければ、新しい挿入物はすべて拒否されます。 – revvy
この場合、setは使用しないでください。ルックアップテーブルと外部キーを使用して、リストのプロダクトコードを制限します。その場合には、新しいレコードを商品コードルックアップテーブルに挿入するだけです。 – Shadow