Interruption de l'exécution de fichiers PHP
Lors d'un récent effort de codage, une fonction PHP utilisée pour gérer les requêtes d'une application Android a rencontré un problème où certains des parties du code n'étaient pas exécutées. Plus précisément, le programme n'a pas pu accéder à une section spécifique dans laquelle un fichier était en cours de création.
Après enquête, les fichiers de débogage créés par le développeur ont révélé que le code dans la section n'était pas saisi. Cela a provoqué une analyse plus approfondie du code, en se concentrant sur les opérations de requête et de base de données.
Décodage de l'erreur
Lors de l'exécution de la requête, le programme recevait parfois un message d'erreur. indiquant "statut de table inconnu : TABLE_TYPE." Ce message déroutant indiquait un problème avec la connexion à la base de données.
Refactoring pour l'efficacité
L'approche initiale consistant à écrire une grande fonction avec plusieurs lignes dédiées à l'écriture de fichiers et à la base de données la manipulation s’est avérée inefficace et sujette aux erreurs. Pour résoudre ce problème, le développeur a opté pour une conception plus modulaire.
Deux nouvelles fonctions ont été introduites : file_put(), qui gérait l'écriture dans les fichiers, et checkin(), qui gérait les opérations de base de données. Diviser le code de cette manière a permis un débogage et une refactorisation plus faciles.
Interaction de base de données raffinée
Les interactions de base de données ont été encapsulées dans une classe MySql, fournissant une analyse plus structurée et plus efficace des erreurs. -interface résistante à la base de données. La classe gérait les établissements de connexion, l'exécution des requêtes et la gestion des erreurs, simplifiant ainsi les opérations de base de données au sein de la fonction checkin().
Exemple de code remanié
Le code révisé utilise désormais les nouvelles fonctions file_put() et MySql, résultant en une structure plus organisée et plus gérable.
<code class="php">function file_put($number, $data) { $path = sprintf("C:/temp/wamp/www/file%d.txt", $number); file_put_contents($path, $data); } function checkin(MySql $DB, $TechID, $ClientID, $SiteID) { $query = sprintf("SELECT `Type` FROM `Log` WHERE `TechID` = '%d' ORDER BY LogTime DESC LIMIT 1", $TechID); file_put(5, $query); $result1 = $DB->query("SELECT COUNT(*) FROM Log"); $result2 = $DB->query($query); foreach ($result1 as $row1) { list($count) = $row1; $data = "ClientID:$ClientID TechID:$TechID SiteID:$SiteID Count:$count"; file_put(3, $data); foreach ($result2 as $row2) { file_put(4, $data); } } } $config = array( 'server' => 'localhost', 'name' => 'root', 'password' => '', 'db' => 'test', ); $db = new MySql($config); checkin($db, 1, 2, 3, 4);</code>
Conclusion
En refactorisant le code, en gérant les interactions avec la base de données via un classe et en divisant les responsabilités entre plusieurs fonctions, le problème de la non-exécution de la section de code a été résolu. Le code résultant est plus modulaire, plus facile à déboguer et robuste.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!