DUMP SQL AVEC SÉLECTION AUTOMATIQUE DES TABLES

cs_lanner Messages postés 131 Date d'inscription samedi 16 avril 2005 Statut Membre Dernière intervention 8 avril 2015 - 16 mars 2011 à 14:26
cs_christobal Messages postés 208 Date d'inscription jeudi 3 octobre 2002 Statut Membre Dernière intervention 31 mars 2011 - 28 mars 2011 à 08:38
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/52942-dump-sql-avec-selection-automatique-des-tables

cs_christobal Messages postés 208 Date d'inscription jeudi 3 octobre 2002 Statut Membre Dernière intervention 31 mars 2011
28 mars 2011 à 08:38
@theptitprince
:D je ne souhaite pas faire un simple dump de ma base (elle est archivé quotidiennement) mais uniquement sauvegarder les tables propre a un client "prefix" a un instant.
Le tout est dans une fonction qui archive la db puis les supprimes :)
cs_theptitprince Messages postés 14 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 5 janvier 2012
27 mars 2011 à 23:53
Merci a tous pour vos commentaire et vos notes :)

@ Christobal :
Je ne vois pas vraiment l'utilité d'une close LIKE puisque le but est de sauvegarder l'intégralité d'un base SQL.
Cependant, je pense en effet qu'il est possible de mettre une close LIKE, mais pas avec un ' WHERE '.$table[0] puisque $table[0] est le nom de la table... Il faut mettre un nom de colonne, et encore...
Pour obtenir le nom de la colonne, tu peux passer par un explode(",",$donnee_structure[1])... Mais tu serais après obligé pendant toute la sauvegarde de faire un like d'un numéro de colonne fixe sans pouvoir changer de colonne, a condition que la dite colonne existe...
Quoiqu'il en soit, je n'en vois pas une grande utilité pour une sauvegarde.... Peux-tu me dire pourquoi tu as besoin d'un LIKE?

@ Autre:
Je ne sais pas si free permet de changer l'allocation maximale... C'est assez bridé Free de ce que je m'en souviens...
cs_christobal Messages postés 208 Date d'inscription jeudi 3 octobre 2002 Statut Membre Dernière intervention 31 mars 2011
27 mars 2011 à 23:50
Pfff, pô les yeux en face des trous ce soir.
bon le plus simple c'est de le mettre dans "$req_table" :

$req_table = 'SHOW TABLES LIKE \'' . $client . '%\' ' ;

@++ et encore merki pour la source ;)
cs_christobal Messages postés 208 Date d'inscription jeudi 3 octobre 2002 Statut Membre Dernière intervention 31 mars 2011
27 mars 2011 à 23:39
C'est parfait, exactement se que j'avais besoin.
Juste une chose dans "$req_tout" vous pensez qu'il est possible de mettre une close where et LIKE du style :
$req_tout = 'SELECT * FROM ' . $table[0] . ' WHERE ' . $table[0] . ' LIKE \'' . $prefix. '%\' ' ;

parce que je n'y arrive pô :)

merki
cs_RudiRatlos Messages postés 6 Date d'inscription vendredi 17 février 2006 Statut Membre Dernière intervention 10 décembre 2007
26 mars 2011 à 09:40
parfait :) 10/10
pmtjnden Messages postés 14 Date d'inscription lundi 28 mars 2005 Statut Membre Dernière intervention 4 juillet 2011
21 mars 2011 à 17:53
bravo pour le script... ca marche super en local.
Je vais voir si je trouve une solution pour Free...(je la déposerais ici)
Si quelqu'un a une idée je suis preneur.
pmtjnden Messages postés 14 Date d'inscription lundi 28 mars 2005 Statut Membre Dernière intervention 4 juillet 2011
21 mars 2011 à 17:38
bonjour,
quelque soit la taille que l'on alloue (même si on enlève la ligne d'allocation mémoire) sur Free, un message d'erreur apparait :

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 1024 bytes) in /mnt/160/sdb/9/8/nomdusite/chemin/page.php on line xxx (48)

la ligne xxx correspondant à la ligne :
while($donnees_tout = mysql_fetch_array($result_tout)){
en cas de grosse base....

ou à la ligne (61) :
$tout_contenu = str_replace(',);',');',$tout_contenu);
en cas de base plus petite
cs_lanner Messages postés 131 Date d'inscription samedi 16 avril 2005 Statut Membre Dernière intervention 8 avril 2015
18 mars 2011 à 12:42
ah ben sous dreamweaver on voit bien le bug la colorisation de syntaxe en prend un coup si on ne fait pas ce que j'ai marqué .. enfin bref c'est juste l'information , la correction

Pour moi la variable c'est forcement :
Ligne 13
$tout_contenu ="";
vincseize Messages postés 113 Date d'inscription mardi 25 février 2003 Statut Membre Dernière intervention 28 mars 2010
18 mars 2011 à 01:55
et suite non non

$tout_contenu = '';
vincseize Messages postés 113 Date d'inscription mardi 25 février 2003 Statut Membre Dernière intervention 28 mars 2010
18 mars 2011 à 01:55
non, non:

$contenu .= "'".addslashes($donnees_tout[$i])."',";
cs_lanner Messages postés 131 Date d'inscription samedi 16 avril 2005 Statut Membre Dernière intervention 8 avril 2015
17 mars 2011 à 21:17
re-Coucou
PS : petite faute dans cette partie , un ' de trop :) > $tout_contenu =""';
vincseize Messages postés 113 Date d'inscription mardi 25 février 2003 Statut Membre Dernière intervention 28 mars 2010
17 mars 2011 à 18:54
Le truc en fait,

ce serait de detecter si la conf serveur est en agic quote ou non
car la mon patch (un peu grave vite fait), evites les erreurs , mais
retire tous les guillemets du coup ...

ceci dit
je pense que c'est à l insert de données avant dans la base, donc le fameux addslash
auquel il faut penser ds le cas de magic_quotes on ou off

:)
cs_theptitprince Messages postés 14 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 5 janvier 2012
17 mars 2011 à 18:48
En effet, je n'y ai pas pensé des le début (en fait, j'ai tiré ce script de mon site, et les variables contenu et $structure et $tout_contenu sont initialisés des le lancement de index.php. Je rajoute donc!
Merci de la remarque pour les slashes!
vincseize Messages postés 113 Date d'inscription mardi 25 février 2003 Statut Membre Dernière intervention 28 mars 2010
17 mars 2011 à 18:25
Et suite

pour ceux qui ont des problemes de slashes (voir magic_quotes)

changer:

$contenu .= "'".$donnees_tout[$i]."',";

par

$contenu .= "'".addslashes($donnees_tout[$i])."',";
vincseize Messages postés 113 Date d'inscription mardi 25 février 2003 Statut Membre Dernière intervention 28 mars 2010
17 mars 2011 à 17:45
Hi

parfait

cependant
je me suis permis néanmoins d'ajouter

en ligne 28

// init variables
$structure = '';
$tout_contenu = '';

pour eviter le message d'erreur non bloquant 'variables indéfinies'
cs_theptitprince Messages postés 14 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 5 janvier 2012
16 mars 2011 à 16:02
En effet, en fonction de la taille de la base sauvegardée, il est possible que le memory_limit soit trop petit (limité à 8M il me semble, si ma mémoire est bonne). Après, à chacun de le modifier en conséquence!
cs_lanner Messages postés 131 Date d'inscription samedi 16 avril 2005 Statut Membre Dernière intervention 8 avril 2015
16 mars 2011 à 15:52
oui je l'accorde aussi :) je n'ai pas directement testé, cependant une information il se peu que le memory_limit soit trop bas est provoque une erreur et du coup ne fonctionera pas
sur le script on peu ajouter (si on a pas accès a la configuration)

ini_set("memory_limit",'16M');

Dans mon cas j'avais l'erreur : Allowed memory size of 8388608 bytes exhausted
cs_theptitprince Messages postés 14 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 5 janvier 2012
16 mars 2011 à 14:40
Bonjour.
Je l'accorde, mes noms de variables ne sont pas forcément évident. Tout est défini au début du code avec ses variables:

$host = 'localhost';
$user = 'nomdutilisateur';
$login = 'motdepasse';
$dbname = 'information_schema';

Je pense tout de même qu'en regardant le code, il était possible d'identifier les variables...
cs_lanner Messages postés 131 Date d'inscription samedi 16 avril 2005 Statut Membre Dernière intervention 8 avril 2015
16 mars 2011 à 14:26
Bonjour

Ou se définie le mot de passe ?
Rejoignez-nous