Maison >base de données >tutoriel mysql >Comment puis-je diviser et exécuter efficacement des fichiers MySQL volumineux dans un environnement PHP sans surcharger la mémoire ?
Lors de l'importation de fichiers MySQL volumineux dans un site Web utilisant PHP, il est crucial de gérer efficacement les requêtes. Sans accès à la ligne de commande MySQL, diviser un fichier en requêtes uniques devient essentiel.
La fonction suivante divise un gros fichier SQL en requêtes individuelles sans nécessiter que le fichier entier soit être chargé en mémoire :
<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>
Cette fonction résout les pièges courants tels que les délimiteurs de champs et les sauts de ligne dans les champs mémo.
Pour démontrer le fonctionnement de la fonction efficacité, considérez les données de test suivantes :
<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>
L'exécution de la fonction SplitSQL sur ces données produit le résultat suivant :
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;
Cela démontre la fiabilité de la fonction dans la division précise des requêtes.
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!