2016-10-29 2 views
1

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, CONTRAINTE posts_ibfk_1 FOREIGN KEY (thread_id) RÉFÉRENCES threads (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.

+0

Avez-vous '' entité threads' avec id' égale à ' thread_id' vous fournissez dans bindParam? – lamik

+1

Supprime les apostrophes entourant les espaces réservés de la requête. – shudder

Répondre

0

vous pouvez le faire de cette façon, avant que les données d'insertion FOREIGN_KEY_CHECKS = 0 mis à nouveau actif avec la même ligne de requête avec la valeur 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");