C'est cela (on passe sous silence les questions d'injections, évidemment; mais je préfère le marquer au cas où d'autres lisent et reprennent cet exemple ).
S'il y a un problème (coupure de réseau, connexion perdue au SQL, etc) alors le "COMMIT" n'aura pas eu lieu et donc, le serveur SQL ne va rien enregistrer: la BDD sera dans l'état initial où elle était. S'il y a une erreur (duplicate id par exemple), charge à toi de la traiter et de poursuivre l'exécution (jusqu'au COMMIT, donc, les modifs seront sauvées) ou de l'arrêter (ROLLBACK, indiquant de ne pas sauvegarder le résultat de la transaction et de repartir de l'état initial du serveur [en pratique, on repart du début de la transaction, qui est fermée par la même occasion me semble-t-il]).
Je ne connais juste pas "MYSQLI_TRANS_START_READ_ONLY", donc à voir ce que fait ce flag.
Okay, d'après la doc PHP:
Ce qui, d'après la doc MySQL:
Dans ton cas, tu fais des insertions dans des tables, donc tu ne fais pas de la lecture seule. Tu peux soit utiliser le READ_WRITE (cf doc PHP), soit aucun flag (qui, de mémoire, correspond au READ WRITE, mais à vérifier).
Et MyISAM (un des moteurs de stockage de MySQL) ignore les transactions, donc utilise InnoDB partout
S'il y a un problème (coupure de réseau, connexion perdue au SQL, etc) alors le "COMMIT" n'aura pas eu lieu et donc, le serveur SQL ne va rien enregistrer: la BDD sera dans l'état initial où elle était. S'il y a une erreur (duplicate id par exemple), charge à toi de la traiter et de poursuivre l'exécution (jusqu'au COMMIT, donc, les modifs seront sauvées) ou de l'arrêter (ROLLBACK, indiquant de ne pas sauvegarder le résultat de la transaction et de repartir de l'état initial du serveur [en pratique, on repart du début de la transaction, qui est fermée par la même occasion me semble-t-il]).
Je ne connais juste pas "MYSQLI_TRANS_START_READ_ONLY", donc à voir ce que fait ce flag.
Okay, d'après la doc PHP:
Citation :MYSQLI_TRANS_START_READ_ONLY: Start the transaction as "START TRANSACTION READ ONLY".
Ce qui, d'après la doc MySQL:
Citation :The READ ONLY restriction prevents the transaction from modifying or locking both transactional and nontransactional tables that are visible to other transactions; the transaction can still modify or lock temporary tables.
Dans ton cas, tu fais des insertions dans des tables, donc tu ne fais pas de la lecture seule. Tu peux soit utiliser le READ_WRITE (cf doc PHP), soit aucun flag (qui, de mémoire, correspond au READ WRITE, mais à vérifier).
Et MyISAM (un des moteurs de stockage de MySQL) ignore les transactions, donc utilise InnoDB partout