Position actuelle: Accueil> Derniers articles> Comment utiliser correctement MySQLI :: Begin_transaction pour implémenter le contrôle des transactions de la base de données?

Comment utiliser correctement MySQLI :: Begin_transaction pour implémenter le contrôle des transactions de la base de données?

gitbox 2025-08-21

<span><span><span class="hljs-meta"><?php</span></span><span> </span><span><span class="hljs-comment">// 本段是与文章内容无关的部分</span></span><span> </span><span><span class="hljs-comment">// 例如可以是作者信息、版权声明或加载某些配置</span></span><span> </span><span><span class="hljs-title function_ invoke__">date_default_timezone_set</span></span><span>(</span><span><span class="hljs-string">'Asia/Shanghai'</span></span><span>); </span><span><span class="hljs-variable">$author</span></span><span> = </span><span><span class="hljs-string">"数据库事务研究小组"</span></span><span>; </span><span><span class="hljs-variable">$publish_date</span></span><span> = </span><span><span class="hljs-title function_ invoke__">date</span></span><span>(</span><span><span class="hljs-string">'Y-m-d'</span></span><span>); </span><span><span class="hljs-meta">?></span></span><span> <hr> <h1>如何正确使用 mysqli::</span><span><span class="hljs-variable constant_">begin_transaction</span></span><span> 来实现数据库事务控制?</h1> <p>在使用 MySQL 数据库进行开发时,事务控制是保障数据一致性与完整性的重要手段。PHP 的 <code>mysqli

  • : Facultatif, spécifiez un comportement de transaction tel que Mysqli_Trans_Start_Read_only ou MySQLI_TRANS_START_READ_WRITE .
  • $ nom : Facultatif, affectez un nom à la transaction (principalement utilisé dans les transactions XA ou certains scénarios avancés).

3. Exemples de base
 
</span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">'localhost'</span></span><span>, </span><span><span class="hljs-string">'user'</span></span><span>, </span><span><span class="hljs-string">'password'</span></span><span>, </span><span><span class="hljs-string">'testdb'</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_errno) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">'Échec de la connexion: '</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_error);
}

</span><span><span class="hljs-keyword">try</span></span><span> {
    </span><span><span class="hljs-comment">// Activer explicitement les transactions</span></span><span>
    </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">begin_transaction</span></span><span>();

    </span><span><span class="hljs-comment">// Exécuter plusieurs éléments connexes SQL Déclaration</span></span><span>
    </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"UPDATE accounts SET balance = balance - 100 WHERE id = 1"</span></span><span>);
    </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"UPDATE accounts SET balance = balance + 100 WHERE id = 2"</span></span><span>);

    </span><span><span class="hljs-comment">// Soumettre les transactions</span></span><span>
    </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">commit</span></span><span>();
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Transférer avec succès"</span></span><span>;
} </span><span><span class="hljs-keyword">catch</span></span><span> (</span><span><span class="hljs-built_in">Exception</span></span><span> </span><span><span class="hljs-variable">$e</span></span><span>) {
    </span><span><span class="hljs-comment">// Retour lorsqu&#39;une erreur se produit</span></span><span>
    </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">rollback</span></span><span>();
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Échec du transfert: "</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>();
}

</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">close</span></span><span>();

4. Choses à noter
  • Assurez-vous que AutoCommit est désactivé ( begin_transaction éteindra automatiquement le mode AutoCommit de la session en cours).
  • Gérez toujours les transactions dans Try ... Catch pour s'assurer que les erreurs peuvent être annulées.
  • Dans des environnements de concurrence élevés, utilisez raisonnablement les verrous et les niveaux d'isolement (peut être défini via le niveau d'isolement des transactions définies ).

5. Résumé

L'utilisation de mysqli :: begin_transaction permet aux développeurs PHP de gérer les processus de transaction plus intuitivement et de manière contrôlable. Dans les projets réels, il est important d'utiliser des transactions lors de l'exécution de plusieurs opérations de base de données liées à la logique et de faire un bon travail de gestion des erreurs et de logique pour assurer la cohérence et la sécurité des données.

  • Étiquettes associées:

    mysqli