Récuperation de variable

pepyte
Invité n'ayant pas de compte PHPfrance

10 mai 2010, 18:19

Je n'ai pas d'erreur je patiente et rien ne se passe. Et c'est vrai que je peux l'optimiser un petit peu histoire que le traitement se fasse plus vite. Pour l'autoincrementation, c'est surtout lorsqu'un enregistrement est supprimé. Par exemple (dernier enreg 165 supprimé, le suivant ne va pas etre 165 mais 166) tu vois ce que je veux dire?
Et pour lire qu'une colone je vais le faire de suite.

ViPHP
ViPHP | 5462 Messages

10 mai 2010, 18:23

Je n'ai pas d'erreur je patiente et rien ne se passe. Et c'est vrai que je peux l'optimiser un petit peu histoire que le traitement se fasse plus vite. Pour l'autoincrementation, c'est surtout lorsqu'un enregistrement est supprimé. Par exemple (dernier enreg 165 supprimé, le suivant ne va pas etre 165 mais 166) tu vois ce que je veux dire?
Et pour lire qu'une colone je vais le faire de suite.
pas grave ca l'id c'est pas important :wink:
pour afficher les erreur dans ton code fais
ini_set('display_errors', 1);
ini_set('error_reporting', E_ALL | E_STRICT);
ou les valeur direct dans ton php.ini

regarde du coté de LOAD DATA, ca fais ce que tu veux direct :wink:

ViPHP
ViPHP | 5462 Messages

10 mai 2010, 18:37

version optimiser (sans le LOAD DATA) comme t'as utilisé mysqli (c'est bien :wink: ) tu peux utiliser les requêtes préparées , ce qui te donnerais (j'ai pas essayer)
$chemin = $_FILES['fic_man']['tmp_name'];	
$link 	= mysqli_connect('', '','', '');
	
$file = new SplFileObject($chemin);
$file->setFlags(SplFileObject::READ_CSV);
$file->setCsvControl(';');
	
$stmt = mysqli_prepare($link, "REPLACE INTO jos_vm_manufacturer SET mf_name = ?");
	
foreach ($file as $row)
{
    mysqli_stmt_bind_param($stmt, 's', $row[0]);
    mysqli_stmt_execute($stmt);
}

pepyte
Invité n'ayant pas de compte PHPfrance

11 mai 2010, 10:08

Désolé hier je suis parti sans posté mon au revoir. Merci pour la version optimisée ^^ c'est gentil. Je ne suis pas un as de l'objet mais si je comprends bien on créé l'objet $file, on le lit grace à ça "setFlags(SplFileObject::READ_CSV);", on lui indique le separateur "$file->setCsvControl(';')" par contre la suite j'ai du mal...

ViPHP
ViPHP | 5462 Messages

11 mai 2010, 10:17

Désolé hier je suis parti sans posté mon au revoir. Merci pour la version optimisée ^^ c'est gentil. Je ne suis pas un as de l'objet mais si je comprends bien on créé l'objet $file, on le lit grace à ça "setFlags(SplFileObject::READ_CSV);", on lui indique le separateur "$file->setCsvControl(';')" par contre la suite j'ai du mal...
exact, ensuite on fait un requete preparer, c'est un peux comme un template de requête dans laquelle y'a on change juste une valeur
REPLACE jos_vm_manufacturer SET mf_name = ?
REPLACE c'est comme un mélange de INSERT INTO et d'UPDATE, en gros si ca existe on fait un UPDATE si ca existe pas on fait un INSERT INTO
le "?" c'est ta variable en gros

ensuite on fait un boucle sur le CVS pour chaque ligne $row[0] correspond a ta première colonne de la ligne, ensuite on bind la valeur pour la requete, en lui disant que c'est tu type "string" (c'est pareil que pour les sprintf, s :string, d:nombre.....), et enfin on exécute la requête :wink:

pepyte
Invité n'ayant pas de compte PHPfrance

11 mai 2010, 10:30

Mais ça ne fait pas perdre du temps a l'exécution de faire un UPDATE ou INSERT à chaque ligne du fichier ??
Et j'ai executé le code mais rien ne s'est passé je vais regarder ça...

ViPHP
ViPHP | 5462 Messages

11 mai 2010, 10:39

Mais ça ne fait pas perdre du temps a l'exécution de faire un UPDATE ou INSERT à chaque ligne du fichier ??
Et j'ai executé le code mais rien ne s'est passé je vais regarder ça...
si forcement mais beaucoup beaucoup moins en requête préparer, puisque c'est pas une nouvelle requête a chaque fois, après faudrais afficher les erreur pour voir ce qui se passe avec mysqli_stmt_error

pepyte
Invité n'ayant pas de compte PHPfrance

11 mai 2010, 10:47

Ok ok je comprends mieux, c'est une sorte de cache non? Pour ce qui est des erreurs, rien ne s'affiche, mais rien ne s'insert dans la DB. J'ai regardé la syntaxe de "REPLACE INTO", si c'est une insertion ne faut-il pas faire "REPLACE INTO [table] (champs) VALUES (valeur)" ? Et pour un Update comment sait-il le quel changer, car on ne lui met pas de condition...

ViPHP
ViPHP | 5462 Messages

11 mai 2010, 10:54

Ok ok je comprends mieux, c'est une sorte de cache non? Pour ce qui est des erreurs, rien ne s'affiche, mais rien ne s'insert dans la DB. J'ai regardé la syntaxe de "REPLACE INTO", si c'est une insertion ne faut-il pas faire "REPLACE INTO [table] (champs) VALUES (valeur)" ? Et pour un Update comment sait-il le quel changer, car on ne lui met pas de condition...
ouia c'est une sorte de cache si on veux (t'aura plus d'info ici)
sinon y'a plusieurs syntaxe pour le REPLACE ca dépend des usages
pour savoir lequel changer ca marche uniquement avec les PRIMARY KEY et les UNIQUE, donc dans la logique il faudrait que ton champs mf_name soit en UNIQUE

Eléphant du PHP | 101 Messages

11 mai 2010, 11:11

j'ai laissé tourner mon script 15 minutes a peu près mais rien a été inséré et ça continué de chercher et comme hier ça fait tout bugguer :x . Ça commence a être relou lol.

Eléphant du PHP | 101 Messages

11 mai 2010, 11:14

Je crois que le problème vient de la récupération du fichier, il ne doit pas le trouver. Quand je fais un echo du $chemin ça ram terrible. C'est ça qui fait planter je pense.

ViPHP
ViPHP | 5462 Messages

11 mai 2010, 11:24

Je crois que le problème vient de la récupération du fichier, il ne doit pas le trouver. Quand je fais un echo du $chemin ça ram terrible. C'est ça qui fait planter je pense.
bizarre ca, limite change ton upload_tmp_dir

envoie le forumliare dans un fichier ou y'a juste ca pour voir
<pre>
<?php
print_r($_FILES);
EDIT : juste au cas où, si ton serveur mysql est en localhost, change localhost par 127.0.0.1 dans ta connexion

Eléphant du PHP | 101 Messages

11 mai 2010, 11:29

Je ne comprends plus rien...il y a des fichier ou je vois le chemin temporaire. Pour un fichier avec "print_r($_FILES);" je vois Array() pour certain fichier mais pour celui que je veux ouvrir ça bug. Y a-t-il des caractère spéciaux qui ne passent pas? Mon fichier se nome "Global_EET220410.csv".

Eléphant du PHP | 101 Messages

11 mai 2010, 11:33

Ha non c'est encore plus étrange la. C'est aléatoire des fois ça marche des fois non...mais je ne récupère tout de même pas le chemin temporaire.

ViPHP
ViPHP | 5462 Messages

11 mai 2010, 11:36

Ha non c'est encore plus étrange la. C'est aléatoire des fois ça marche des fois non...mais je ne récupère tout de même pas le chemin temporaire.
ta un numéro d'erreur ?
tu peux voir a quoi ca correspond ici