0
此問題可能已被問到某處,但我似乎無法在多次搜索後找到它。如果行更改,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
中的所有數據都已被清除,因此我有可怕的失去了所有數據的經驗。
爲什麼你需要自動化ALTER TABLE? –
@davidstrachan因爲儲存產品的表格會隨時修改。如果SET無法相應更新,則任何新的插入都將被拒絕。 – revvy
你不應該在這種情況下使用set。使用查找表和外鍵來限制列表產品代碼。在這種情況下,您需要做的就是在您的產品代碼查詢表中插入一條新記錄。 – Shadow