Je crée un site de forum pour une affectation et le code a bien fonctionné jusqu'à ce que j'ai changé deux choses: J'ai changé mes contraintes de base de données en CASCADE (doit être comme ça pour le reste du site) et j'ai changé la fonction de requête pour préparer, lier et exécuter pour la sécurité.bindParam ne fonctionne pas lorsque la contrainte de clé étrangère est mise en cascade
Ce code fonctionne
$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);
Ce code ne fonctionne pas
$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;
}
Ceci est l'erreur
PDOException: SQLSTATE [23000]: Intégrité violation de contrainte: 1452 Impossible d'ajouter ou de mettre à jour une ligne enfant: une contrainte de clé étrangère échoue (
forum
.posts
, CONTRAINTEposts_ibfk_1
FOREIGN KEY (thread_id
) RÉFÉRENCESthreads
(thread_id
) CASCADE ON SUPPRIMER ON UPDATE CASCADE)
Je suis assez nouveau pour PHP il pourrait être quelque chose de simple, et toute aide serait appréciée.
Avez-vous '' entité threads' avec id' égale à ' thread_id' vous fournissez dans bindParam? – lamik
Supprime les apostrophes entourant les espaces réservés de la requête. – shudder