Обновление внешнего ключа нескольких строк с помощью формы выбора

У меня есть 3 таблицы:

файлы (file_id, имя, и т.д ..),
группы (group_id, name и т.д …) и

file_group (file_id, group_id) => Использование внешнего ключа здесь с первичным
ключи из обеих таблиц (файлов и групп).

Моя проблема: у меня проблемы с обновлением таблицы file_group,

Сообщение об ошибке: Нарушение ограничения целостности: 1062 Duplcate entry
’40 -6 ‘для ключа ПЕРВИЧНЫЙ ….

Я знаю, почему это говорит мне, но я все еще не могу заставить это работать.

Код является:

<form method="post" action="edit.php">

<select multiple="multiple" name="groups" class="form-control" >
<option value=1>Admin</option>
<option value=2>project_1</option>
<option value=11>Project_Bio</option>
<option value=12>Project_3</option>
<option value=20>Project_Off</option>
<option value=22>Project_zed</option>
</select>
</form>

<?php
$id = 40;

if(!empty($_POST)){

//signleton to get the table where i want to make the update
$fc = $app->getTable('fc');

$new_grps = $_POST['groups'];

foreach($new_grps as $k => $new_grp){
$fc->update($id,[
'group_id' => $new_group
]);
}
}?>

0

Решение

В таких случаях вы должны использовать базу данных транзакций. После запуска транзакции вы обновляете столбцы внешнего ключа, а затем фиксируете.

<?php
$id = 40;
if(!empty($_POST)){
//signleton to get the table where i want to make the update
$fc = $app->getTable('fc');
$new_grps = $_POST['groups'];
updateForeign($new_goups,$fc);
}

function updateForeign($new_groups,$fc){
//$dbh is your database connection
$dgh = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
$dbh->beginTransaction();
try{
foreach($new_grps as $k => $new_grp){
$fc->update($id,[
'group_id' => $new_group
]);
}
}
catch(\Exception $e){
$dbh->rollback();
return false;
}
$dbh->commit();
return true;
}

?>

Помните, вы должны получить экземпляр соединения с базой данных PDO в функцииupdateForeign(),

0

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

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

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