bindParam не работает, когда ограничение внешнего ключа установлено в каскад

Я создаю форумный сайт для назначения, и код работал нормально, пока я не изменил две вещи: я изменил свои ограничения базы данных на CASCADE (должен быть таким же для остальной части сайта), и я изменил функцию запроса, чтобы подготовиться, связать и выполнить для безопасности.

Этот код работает

$insert_post_query =
"INSERT INTO posts (
thread_id, user_id, username, post_content, post_date
)
VALUES (
'$topic_id', '$user_id', '$username', '$post_content', '$post_date'
)";
$post_result = $db->query($insert_post_query);

Этот код не работает

$insert_post_query =
"INSERT INTO posts (
thread_id, user_id, username, post_content, post_date
)
VALUES (
'?', '?', '?', '?', '?'
)";
try{
$post_result = $db->prepare($insert_post_query);
$post_result->bindParam(1,$topic_id,PDO::PARAM_INT);
$post_result->bindParam(2,$user_id,PDO::PARAM_INT);
$post_result->bindParam(3,$username,PDO::PARAM_STR);
$post_result->bindParam(4,$post_content,PDO::PARAM_STR);
$post_result->bindParam(5,$post_date,PDO::PARAM_STR);
$post_result->execute();

}catch(Exception $e){
echo "Unable to add the post<br>$e";
exit;
}

Это ошибка

PDOException: SQLSTATE [23000]: нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется (forum,posts, ОГРАНИЧЕНИЕ posts_ibfk_1 ИНОСТРАННЫЙ КЛЮЧ (thread_id) РЕКОМЕНДАЦИИ threads (thread_id) НА УДАЛЕННОМ КАСКАДЕ НА ОБНОВЛЕНИИ КАСКАДА)

Я довольно новичок в PHP, так что это может быть что-то простое, и любая помощь будет оценена.

1

Решение

Вы можете сделать это до вставки набора данных foreign_key_checks = 0, чем активировать его снова с той же строкой запроса со значением 1.

SET foreign_key_checks = 0;
SET foreign_key_checks = 1;

$insert_post_query =
"INSERT INTO posts (
thread_id, user_id, username, post_content, post_date
)
VALUES (
'?', '?', '?', '?', '?'
)";
try{
$post_result = $db->prepare("SET foreign_key_checks = 0");
$post_result = $db->prepare($insert_post_query);
$post_result->bindParam(1,$topic_id,PDO::PARAM_INT);
$post_result->bindParam(2,$user_id,PDO::PARAM_INT);
$post_result->bindParam(3,$username,PDO::PARAM_STR);
$post_result->bindParam(4,$post_content,PDO::PARAM_STR);
$post_result->bindParam(5,$post_date,PDO::PARAM_STR);
$post_result->execute();
}catch(Exception $e){
echo "Unable to add the post<br>$e";
exit;
}
$post_result = $db->prepare("SET foreign_key_checks = 1");
0

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

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