2012-12-03 4 views
0

J'ai deux tables. L'un est le compte, l'autre est l'intérêt. Un compte peut avoir plusieurs intérêts et peut être modifié. Maintenant, le processus supprime tous les intérêts de ce compte, puis insère ces inserts. Le QUERY EST:PHP MySQL Insert échoue après DELETE

"SUPPRIMER des intérêts OÙ account_id = '$ id'"

"INSERT INTO Loisirs (ACCOUNT_ID, interest_name) VALUES ('id $', '$ name')"

J'utilise les deux requête lorsque l'utilisateur met à jour son compte, mais l'insertion échoue, il n'y a rien d'insérer dans la table (ps le interest_id est auto_increment et cela a été compté) mais il n'y a rien de nouveau dans la table. Lorsque je commente la requête de suppression. L'insertion sera réussie.

Est-ce que quelqu'un sait ce que je peux faire?

+0

Le champ auto_increment 'account_id' était-il ou quelque chose? Ou soumis à d'autres contraintes? –

+0

Parce que chaque compte peut avoir plusieurs insterest si j'utilise "mise à jour", il suffit de mettre à jour la ligne précédente, mais pas ajouter plus d'intérêt ou supprimer l'intérêt – user1597498

+0

compte n'est pas auto_increment mais il unique. l'intérêt_dans la table d'intérêt est la clé primaire et auto_increment – user1597498

Répondre

0

Si vous avez des requêtes qui échouent, vous devez capturer l'erreur et voir ce qui s'est mal passé. Dans toutes les API MySQL pour PHP, une requête qui échoue renvoie un code d'état pour l'indiquer. Des exemples de vérification de ce code d'état sont faciles à trouver dans les documents. Mais la plupart des développeurs ne parviennent pas à vérifier l'état.


Utilisez les transactions pour vous assurer que les deux modifications réussissent ensemble ou qu'aucune de ces modifications n'est appliquée.

How to Decide to use Database Transactions

Définition d'une transaction dans MySQL: http://dev.mysql.com/doc/refman/5.5/en/glossary.html#glos_transaction

Syntaxe pour le démarrage et la validation des transactions dans MySQL: http://dev.mysql.com/doc/refman/5.5/en/commit.html

Vous devez utiliser InnoDB. MyISAM ne supporte pas les transactions. En PHP, vous devez arrêter d'utiliser l'ancienne API ext/mysql et commencer à utiliser MySQLi ou PDO.

http://php.net/manual/en/mysqli.quickstart.transactions.php

http://php.net/manual/en/pdo.begintransaction.php

+0

merci facture pour le partage combien de liens utiles – Nishant

+0

7 lien ... je ne reçois jamais autant de lien pertinent –

0

Si vous souhaitez mettre à jour vos enregistrements de la table, vous pouvez exécuter la mise à jour de l'opération. Il comme suit

UPDATE Interests 
SET 
interest_name = '$name' 
WHERE 
accountno = '$id' ; 

Essayez-le. Vous pouvez résoudre votre problème de cette façon.

2

Si vous voulez mettre à jour vos enregistrements de table, vous ferez l'opération update. comme ceci:

UPDATE TABLE_NAME SET FIELD_NAME = 'VARIABLE_NAME' 
    WHERE PRIMERY_FIELD_NAME = 'VARIABLE_NAME' ; 
1

vous ne devez pas utiliser ces deux requêtes, si vous souhaitez mettre à jour les données il suffit d'utiliser la requête updat de mysql.use ceci:

<?php 
$query = "UPDATE Interests SET interest_name = '".$name."' WHERE account_id = '".$id."'" ; 
mysql_query($query); 
?> 
0

Cela se produit parce que la requête sont traités comme deux transactions uniques, de sorte que l'ordre d'exécution n'est pas garanti. L'effet que vous décrivez est dû au fait que l'insertion est traitée avant la suppression. Par conséquent, interests_id est incrémenté automatiquement, puis la ligne est supprimée par l'instruction delete. Vous devez modifier la logique de requête ou effectuer les deux requêtes en une seule transaction.