setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Gestion des erreurs // } catch (PDOException $e) { // echo "Erreur : Impossible de se connecter à MySQL. " . PHP_EOL; // echo "Erreur de débogage : " . $e->getMessage() . PHP_EOL; // exit; // } // ----------------------------------------------------- // Initialisation des variables // ----------------------------------------------------- $repD = './themes/dumpTheme/dump-' . $nomTableCibleCss . '.sql'; // ----------------------------------------------------- // Creation de la structure par recup du modele actif // ----------------------------------------------------- $creation = ''; $creation .= "-- -----------------------------\n"; $creation .= "-- Création de la table " . $nomTableCibleCss . "\n"; $creation .= "-- -----------------------------\n"; try { // Récupération de la structure de la table src avec PDO $query = $idPdo->query("SHOW CREATE TABLE " . $nomTableSourceCss); $createTable = $query->fetch(PDO::FETCH_ASSOC); $creation .= $createTable['Create Table'] . ";\n\n"; } catch (PDOException $e) { if (isset($debug[2]) && $debug[2] == '1' ) $debugMsg .= monDebug(2, ['PDOException structure' => $e->getMessage()],'theme.functionDump' ) ; } $creation = str_replace($nomTableSourceCss, $nomTableCibleCss, $creation); // ----------------------------------------------------- // Enregistrement dans le fichier dump // ----------------------------------------------------- $fichierDump = fopen($repD, "wb"); if ($fichierDump) { fwrite($fichierDump, $creation); fclose($fichierDump); } // ----------------------------------------------------- // Recup des données et ajout dans le fichier dump // ----------------------------------------------------- $insertions = ''; $insertions .= "-- -----------------------------\n"; $insertions .= "-- Insertions dans la table " . $nomTableCibleCss . "\n"; $insertions .= "-- -----------------------------\n"; try { // Utilisation d'un curseur pour parcourir les données en lots $stmt = $idPdo->query("SELECT * FROM " . $nomTableSourceCss); while ($mysqlValue = $stmt->fetch(PDO::FETCH_ASSOC)) { $insertions .= "INSERT INTO " . $nomTableCibleCss . " VALUES("; $values = []; foreach ($mysqlValue as $i => $valeur) { if ($valeur === null) { $values[] = "NULL"; } else { $type = gettype($valeur); // Si c'est une chaîne, ajouter des guillemets if ($type === 'string') { $values[] = "'" . addslashes($valeur) . "'"; } else { $values[] = $valeur; } } } $insertions .= implode(", ", $values) . ");\n"; // Optimisation de l'écriture en fichier en évitant de stocker tout dans une variable if (strlen($insertions) > 1024 * 1024) { // Par exemple, 1 Mo // Écriture partielle dans le fichier pour réduire l'utilisation mémoire file_put_contents($repD, $insertions, FILE_APPEND); $insertions = ''; // Réinitialiser la variable } } } catch (PDOException $e) { if (isset($debug[2]) && $debug[2] == '1' ) echo 'PDOException datas=' . $e->getMessage(); } // ----------------------------------------------------- // Enregistrement dans le fichier dump // ----------------------------------------------------- if ($insertions) { // Écriture finale si des données restent dans la variable file_put_contents($repD, $insertions, FILE_APPEND); } // ----------------------------------------------------- // Debug // ----------------------------------------------------- if (isset($debug[2]) && $debug[2] == '1') { $debugMsg .= monDebug(2, ['table creation' => $creation], '');} if (isset($debug[2]) && $debug[2] == '1') { $debugMsg .= monDebug(2, ['table insertions' => $insertions], '');} // // Fonction pour obtenir le type d'un champ avec PDO // function pdo_field_type($resConn, $field_offset) { // // Utilisation de PDO pour obtenir le type d'un champ // $stmt = $resConn->query("DESCRIBE " . $resConn->getTableName()); // $fields = $stmt->fetchAll(PDO::FETCH_ASSOC); // return $fields[$field_offset]['Type'] ?? null; // } ?>