Importation d'un gros fichier MySQL en PHP : une solution complète de requêtes fractionnées
L'importation d'un gros fichier MySQL dans un site Web de fournisseur d'hébergement partagé peut être un défi, surtout lorsque vous utilisez PHP et que l'accès externe à MySQL est restreint. Cet article fournit une solution complète qui résout ce problème en divisant de manière fiable le fichier en requêtes individuelles pour l'importation.
Défis à prendre en compte
Lors de l'analyse et de l'interrogation d'un fichier MySQL volumineux en PHP, plusieurs défis se posent :
Une solution fiable de requête fractionnée
Pour surmonter ces défis, cet article présente une fonction respectueuse de la mémoire appelée SplitSQL(). Cette fonction lit le fichier ligne par ligne et accumule les requêtes individuelles jusqu'à ce qu'un délimiteur de requête (tel qu'un point-virgule) soit rencontré. Voici le code :
function SplitSQL($file, $delimiter = ';') { set_time_limit(0); if (is_file($file) && is_resource($file = fopen($file, 'r'))) { $query = array(); while (!feof($file)) { $query[] = fgets($file); if (preg_match('~' . preg_quote($delimiter, '~') . '\s*$~iS', end($query))) { $query = trim(implode('', $query)); if (mysql_query($query) === false) { echo 'ERROR: ' . $query . "\n"; } else { echo 'SUCCESS: ' . $query . "\n"; flush(); } $query = array(); } } fclose($file); return true; } return false; }
Convivial pour la mémoire et testé
Cette fonction alloue de la mémoire uniquement si nécessaire, évitant ainsi les problèmes de mémoire. Il a été testé sur de grandes sauvegardes SQL de phpMyAdmin, démontrant sa capacité à gérer efficacement les données du monde réel.
Tester les données et la sortie
Exemples de données et leur sortie respective à l'aide la fonction SplitSQL() :
Données de test :
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;
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 robuste et fiable pour diviser les gros fichiers MySQL en requêtes individuelles, permettant une importation efficace et automatisée de bases de données dans des environnements d'hébergement partagé. En résolvant les contraintes de mémoire et en tenant compte de différents types de données, cette fonction simplifie le processus complexe d'importation de gros fichiers MySQL en PHP.
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!