Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & ODBC
PHP & ODBC Forum d'entraide sur ODBC avec PHP. Avant de poster -> FAQ ODBC
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/08/2011, 15h09   #1
Membre régulier
 
Avatar de Romanops
 
Homme Romain Delecambre
Développeur Web
Inscription : octobre 2002
Messages : 215
Détails du profil
Informations personnelles :
Nom : Homme Romain Delecambre
Âge : 28
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2002
Messages : 215
Points : 97
Points : 97
Envoyer un message via AIM à Romanops Envoyer un message via MSN à Romanops Envoyer un message via Yahoo à Romanops Envoyer un message via Skype™ à Romanops
Par défaut Transaction sur HyperFileSql via ODBC

Bonjour à tous !

Je travaille sur une application php qui attaque une base de données HyperFileSql (© PCSoft).

En fait, à un moment, je dois ajouter un enregistrement dans une de mes tables dont l'identifiant est auto-incrémenté.

Mon énoncé est le suivant : comment récupérer cet identifiant sachant qu'il peut y avoir environ 500 utilisateurs connectés en même temps ? D'après mes recherches, aucune instruction php ne permet de faire ça de la même manière que mysql_insert_id.

J'ai donc essayé de trouver une solution alternative : la transaction.

Premièrement (en théorie) : Dans une transaction, si je fais un ajout dans ma table, puis un select max(id), le contexte de la transaction fait que personne n'aura le même id, même si l’exécution est faite en simultanée, exact ? Si ce n'est pas le cas, autant que j'arrête tout de suite de travailler sur cette solution... Qu'en pensez-vous ?

Deuxièmement (en pratique) : Lorsque je lance un début de transaction avec la commande php odbc_autocommit(self::$Connexion, false), il me renvoie vrai (signifiant donc qu'une transaction démarre).
Ensuite, je fais un insert, puis un select max(id).
Enfin, je lance la fin de transaction avec la commande odbc_commit(self::$Connexion);odbc_autocommit(self::$Connexion, true); (la deuxième instruction sert à remettre l'autocommit pour mes requêtes classiques).

Jusque là tout va bien, l'enregistrement est bien créé et je récupère bien l'identifiant voulu. Seulement, étant tout seul à travailler sur l'application pour le moment, je ne peux voir pour le moment si la transaction s'exécute bien dans un contexte particulier donc pour tester cela, j'ai essayé de faire un odbc_rollback(self::$Connexion); pour voir si l'enregistrement ne se crée pas, comme il le devrait. C'est là qu'est mon problème, la ligne dans ma table a été créé, malgré le rollback (annulation des requêtes depuis le début de la transaction).
Et franchement, je ne comprends pas pourquoi... Avez-vous une idée ?

Merci d'avance !!
__________________
En vous remerciant, bonsoir.
Romanops est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h58.


 
 
 
 
Partenaires

Hébergement Web