Aller au contenu

Remplacer INSERT par UPDATE


apt

Sujets conseillés

Salut,

j'ai fait une requete pour avoir tout les enregistrements ayant le champ act egal à 2

SELECT `id` FROM `tab` WHERE `act` = 2

j'ai sauvegarde le tout dans un fichier *.sql

j'aimerias avoir un petit code php qui fera en sorte de changer dans mon fichier sql tout les lignes :

INSERT INTO `tab` VALUES (x);

par

UPDATE `tab` SET `act` = '2' WHERE `id` = 'x';

et puis lancer le nouveau fichier pour mettre a jour ma table sur mon hebergeur.

Merci.

Lien vers le commentaire
Partager sur d’autres sites

C'est plus facile a faire avec ultraedit.

Sinon un code en live :

$tab = file("tonfichier.sql");

for($i=0;$i<count($tab); $i++) {

$contenu = $tab[$i];

$contenu = str_replace ( "INSERT INTO ", "UPDATE ", $contenu );

$contenu = str_replace ( " VALUES (", " SET `act` = '2' WHERE `id` = '", $contenu );

$contenu = str_replace ( ");", "';", $contenu );

$newtab[] = $contenu;

}

$handle = fopen("newfichier.sql", 'w+');

for($i=0;$i<count($newtab); $i++) {

fwrite($handle, $newtab[$i]);

}

fclose($handle);

Un truc comme ca ? Hum j'ai pris en compte que si ton fichier avait toutes ses lignes à changer sinon il faudrait ajouter un if au niveau du premier "for".

Modifié par petit-ourson
Lien vers le commentaire
Partager sur d’autres sites

Enfin oui et non. Si je met juste un $newtab[], il me crée une nouvelle ligne dans mon tableau à la fin de celui-ci comme un grand.

Il en parle pas dans la doc php (ou j'ai pas trouvé mais ça revient à cela :

[]= could be considered an Array Operator (in the same way that .= is a String Operator).

[]= pushes an element onto the end of an array, similar to array_push:

Lien vers le commentaire
Partager sur d’autres sites

Je m'excuse petit-ourson ...

reçu 5/5 et ça fonctionne tres bien ...

Merci infiniment.

je vais essayer d'avoir un code qui partage le fichier initial en petits morceaux pour eviter de passer le temps d'execution de script qui est 30 secondes ensuite je ferais de meme avec le second fichier lequel je devrais lancer sur mon hebergeur ....

;)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

pour ce qui est de la limitation du temps maximum d'execution des scripts, tu peux jeter un oeil à la fonction :

set_time_limit.

void set_time_limit ( int seconds)

Autrement dit,

tu mets

set_time_limit ( 86400);

au début de ton script, et il s'executera pendant une journée maximum, et non 30 secondes.

Nico.

Lien vers le commentaire
Partager sur d’autres sites

Merci petit-ourson pour tes encouragements :D

Anonymus -> set_time_limit (86400) peut-elle "ecraser" le temps par defaut dans php.ini limité par 30 secondes meme sur des hebergeurs comme multimania ?

J'ai modifier le code de petit-ourson pour en avoir des petits morceaux du fichier resultats.sql, le voila :

$handle = fopen("res00.sql", 'w+');

for($i=0;$i<count($newtab); $i++) {
if ($i%40==0)  // 40 lignes par fichier
{
 fclose($handle);
 echo "i = ".$i." "; $j = ceil($i/40);
 $fich = "res$j"; echo "$fich = ".$j."<br>";
 $handle = fopen("$fich.sql", 'w+');

}
echo "ii = ".$i."<br>";
fwrite($handle, $newtab[$i]);
}

fclose($handle);

mais j'ai un probleme :

j'aimerais bien supprimer la ligne :

$handle = fopen("res00.sql", 'w+');

parce que le fichier : res00.sql resultant est vide et il est aussitot ferme apres le premier if (true).

Comment faire ?

Merci.

Modifié par apt
Lien vers le commentaire
Partager sur d’autres sites

Essaies, ca ne coute rien.

Tu as besoin de 2 fonctions, à savoir :

max_execution_time(nb_de_secondes_pendant_lequel_le_script_tourne_maxi);

sleep(nb_de_secondes_pendant_lequel_le_script_dort);

Tu mets :

max_execution_time(86400);

sleep(100);

echo"coucou";

Si ca plante, c'est que la fonction n'est pas acceptée ;)

Nico.

Lien vers le commentaire
Partager sur d’autres sites

Et pour ce code :

$handle = fopen("res00.sql", 'w+');

for($i=0;$i<count($newtab); $i++) {
if ($i%40==0)  // 40 lignes par fichier
{
fclose($handle);
echo "i = ".$i." "; $j = ceil($i/40);
$fich = "res$j"; echo "$fich = ".$j."<br>";
$handle = fopen("$fich.sql", 'w+');

}
echo "ii = ".$i."<br>";
fwrite($handle, $newtab[$i]);
}

fclose($handle);

Y'a-t-il une solution ?

Merci :)

Lien vers le commentaire
Partager sur d’autres sites

Ce code sert a deviser le fichier resultats.sql en petits fihiers de 40 lignes chacun par exemple pur faciliter la mise à jour de mon BDD en auto ou en manuelle ...

Il finctionne a merveille mais j'aimerais bien supprimer la ligne :

$handle = fopen("res00.sql", 'w+');

parce que le fichier : res00.sql resultant est vide et il est aussitot ferme apres le premier if (true).

Comment faire ?

Voilà :lol:

Lien vers le commentaire
Partager sur d’autres sites

Non non c'est pas un probleme de numero de fichier.

mais si j'ecris le code comme suit :

for($i=0;$i<count($newtab); $i++) {
if ($i%50==0)
{
 fclose($handle);
 echo "i = ".$i." "; $j = ceil($i/50);
 $fich = "res$j"; echo "$fich = ".$j."<br>";
 $handle = fopen("$fich.sql", 'w+');

}
echo "ii = ".$i."<br>";
fwrite($handle, $newtab[$i]);
}

fclose($handle);

en enlevant la ligne :

$handle = fopen("res00.sql", 'w+');

ca me donne cette erreur :

Warning: fclose(): supplied argument is not a valid File-Handle resource

???

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...