Optimisation de l'importation de bases de données MySQL en PHP : fractionnement fiable des requêtes
Dans le domaine du développement Web, des scénarios surviennent dans lesquels la mise à jour de sites Web hébergés sur des serveurs partagés nécessite des mises à jour de la base de données. Cependant, l’impossibilité d’accéder à MySQL en externe pose un défi. Pour résoudre ce problème, importer un fichier MySQL via PHP devient nécessaire. Cet article explore une solution efficace pour diviser les gros fichiers de base de données MySQL en requêtes individuelles et les importer à l'aide de PHP.
Énoncé du problème
L'objectif est de développer une méthode fiable pour diviser un gros fichier de base de données en requêtes individuelles sans ouvrir l'intégralité du fichier simultanément. Les contraintes incluent l'indisponibilité de la fonction de ligne de commande MySQL, LOAD DATA INFILE, phpMyAdmin et mysqli_multi_query().
Solution : Fonction SplitSQL
La solution réside dans une mémoire -fonction conviviale appelée SplitSQL, qui parcourt le fichier ligne par ligne et identifie les caractères délimiteurs de requête. Il accumule les lignes dans un tableau jusqu'à ce qu'un délimiteur soit rencontré, formant ainsi une requête complète. La fonction exécute ensuite la requête et fournit des commentaires sur son succès ou son échec.
Mise en œuvre
<code class="php">function SplitSQL($file, $delimiter = ';') { set_time_limit(0); if (is_file($file) === true) { $file = fopen($file, 'r'); if (is_resource($file) === true) { $query = array(); while (feof($file) === false) { $query[] = fgets($file); if (preg_match('~' . preg_quote($delimiter, '~') . '\s*$~iS', end($query)) === 1) { $query = trim(implode('', $query)); if (mysql_query($query) === false) { echo '<h3>ERROR: ' . $query . '</h3>' . "\n"; } else { echo '<h3>SUCCESS: ' . $query . '</h3>' . "\n"; } while (ob_get_level() > 0) { ob_end_flush(); } flush(); } if (is_string($query) === true) { $query = array(); } } return fclose($file); } } return false; }</code>
Tests et résultats
Lors de tests avec un grand dump SQL phpMyAdmin, la fonction SplitSQL a donné des résultats positifs. Les exemples d'entrée et de sortie sont les suivants :
Données de test
<code class="sql">CREATE TABLE IF NOT EXISTS "test" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT, "name" TEXT, "description" TEXT ); BEGIN; INSERT INTO "test" ("name", "description") VALUES (";;;", "something for you mind; body; soul"); COMMIT; UPDATE "test" SET "name" = "; " WHERE "id" = 1;</code>
Sortie
SUCCESS: CREATE TABLE IF NOT EXISTS "test" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT, "name" TEXT, "description" TEXT ); SUCCESS: BEGIN; SUCCESS: INSERT INTO "test" ("name", "description") VALUES (";;;", "something for you mind; body; soul"); SUCCESS: COMMIT; SUCCESS: UPDATE "test" SET "name" = "; " WHERE "id" = 1;
Conclusion
La fonction SplitSQL fournit une solution fiable pour diviser les gros fichiers de base de données MySQL en requêtes individuelles et les exécuter à l'aide de PHP. Il répond efficacement aux contraintes susmentionnées et permet l'importation automatisée des mises à jour de la base de données. Cette approche garantit une maintenance transparente des bases de données dans les environnements d'hébergement partagé.
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!