IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Impossible de mettre à jour une colonne BLOB avec LOAD_FILE


Sujet :

Requêtes MySQL

  1. #1
    Membre averti Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Points : 443
    Points
    443
    Par défaut Impossible de mettre à jour une colonne BLOB avec LOAD_FILE
    Bonjour,
    Je suis chez OVH sur un hébergement mutualisé. J'utilise mysql / php.

    Cela fait des heures depuis hier que j'essaie d'envoyer un fichier et de le stocker dans une table.
    Ma table possède une colonne "id" et une colonne nommée "configclient" de type BLOB.

    Pour tester, voilà ce que je fais:
    Comme je n'y arrive pas depuis un script php, je fais les tests directement dans phpMyadmin en lançant la requête SQL:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE `clients` SET configclient=LOAD_FILE('/home/crysteryx/www/cloud/client.php') WHERE id=33
    Voilà ce qui est affichée après exécution de la requête:

    --> Votre requête SQL a été exécutée avec succès.
    --> 0 ligne affectée. (Traitement en 0.0016 secondes.)
    Donc pas, d'erreur mais rien d'effectué !!
    Si je fais volontairement une faute dans le nom du fichier (exemple client.p au lieu de client.php) c'est pareil, ce qui laisse penser qu'il ne trouve pas le fichier !!
    J'ai essayé tous les chemins possibles, c'est toujours pareil.

    Help please !
    merci

  2. #2
    Membre averti Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Points : 443
    Points
    443
    Par défaut
    J'ai finalement contourné le problème, voici une solution qui fonctionne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    	$res='';
     
    	$tmpName  = $_FILES['file']['tmp_name'];
     
    	//----------------
    	$fp      = fopen($tmpName, 'r');
    	$content = fread($fp, filesize($tmpName));
    	$content = mysqli_real_escape_string($conn, $content);
    	fclose($fp);	
    	//----------------
    	$sql = "UPDATE mytable SET configclient='$content' WHERE id=33";
    	$query = mysqli_query($conn,$sql);
    	if ($query!=1) $res =  'ERROR sending configuration file';
    C'est certainement beaucoup moins optimisé qu'en utilisant la fonction LOAD_FILE mais au moins, ça marche.

  3. #3
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 378
    Points : 19 054
    Points
    19 054
    Par défaut
    Salut franckcl.

    Pour que le load_file fonctionne correctement, vous avez plusieurs conditions :
    1) mettre dans la variable "secure_file_priv" le répertoire où vont se trouver vos fichiers.

    2) mettre le chemin complet ! Exemple : "E:/22.MySql/40.Load/Ex_80/Fic_01.txt" et non juste le nom du fichier "Fic_01.txt"

    3) mettre dans la variable "character_set_filesystem" le même jeu de caractères que celui utilisé dans la table.
    Dans mon exemple, c'est "latin1"

    4) la taille du fichier doit être inférieure à la variable "max_allowed_packet".

    5) avec votre compte, vous devez avoir le privilège "file".

    Tout est expliqué dans ce lien : http://dev.mysql.com/doc/refman/5.7/...tion_load-file

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    --------------
    SET AUTOCOMMIT = 0
    --------------
     
    --------------
    START TRANSACTION
    --------------
     
    --------------
    show variables like 'character_set_filesystem'
    --------------
     
    +--------------------------+--------+
    | Variable_name            | Value  |
    +--------------------------+--------+
    | character_set_filesystem | latin1 |
    +--------------------------+--------+
    --------------
    show variables like 'max_allowed_packet'
    --------------
     
    +--------------------+----------+
    | Variable_name      | Value    |
    +--------------------+----------+
    | max_allowed_packet | 16777216 |
    +--------------------+----------+
    --------------
    show variables like 'secure_file_priv'
    --------------
     
    +------------------+----------------------------+
    | Variable_name    | Value                      |
    +------------------+----------------------------+
    | secure_file_priv | E:\22.MySql\40.Load\Ex_80\ |
    +------------------+----------------------------+
    --------------
    select  host, user, file_priv from  mysql.user where  concat(user,'@',host) = current_user
    --------------
     
    +-----------+------+-----------+
    | host      | user | file_priv |
    +-----------+------+-----------+
    | localhost | root | Y         |
    +-----------+------+-----------+
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE IF NOT EXISTS `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS test
    --------------
     
    --------------
    CREATE TABLE `test` (
      `id`     integer unsigned not null auto_increment primary key,
      `chaine` varchar(255)     not null
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    select load_file('E:/22.MySql/40.Load/Ex_80/Fic_01.txt') as fic_01
    --------------
     
    +-----------------+
    | fic_01          |
    +-----------------+
    | premier fichier |
    +-----------------+
    --------------
    select load_file('E:/22.MySql/40.Load/Ex_80/Fic_02.txt') as fic_02
    --------------
     
    +------------------+
    | fic_02           |
    +------------------+
    | deuxième fichier |
    +------------------+
    --------------
    select load_file('E:/22.MySql/40.Load/Ex_80/Fic_03.txt') as fic_03
    --------------
     
    +-------------------+
    | fic_03            |
    +-------------------+
    | troisième fichier |
    +-------------------+
    --------------
    select load_file('E:/22.MySql/40.Load/Ex_80/Fic_04.txt') as fic_04
    --------------
     
    +-------------------+
    | fic_04            |
    +-------------------+
    | quatrième fichier |
    +-------------------+
    --------------
    select load_file('E:/22.MySql/40.Load/Ex_80/Fic_05.txt') as fic_05
    --------------
     
    +-------------------+
    | fic_05            |
    +-------------------+
    | cinquième fichier |
    +-------------------+
    --------------
    insert into `test` (`chaine`) value
      (load_file('E:/22.MySql/40.Load/Ex_80/Fic_01.txt')),
      (load_file('E:/22.MySql/40.Load/Ex_80/Fic_02.txt')),
      (load_file('E:/22.MySql/40.Load/Ex_80/Fic_03.txt')),
      (load_file('E:/22.MySql/40.Load/Ex_80/Fic_04.txt')),
      (load_file('E:/22.MySql/40.Load/Ex_80/Fic_05.txt'))
    --------------
     
    --------------
    select * from test
    --------------
     
    +----+-------------------+
    | id | chaine            |
    +----+-------------------+
    |  1 | premier fichier   |
    |  2 | deuxième fichier  |
    |  3 | troisième fichier |
    |  4 | quatrième fichier |
    |  5 | cinquième fichier |
    +----+-------------------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 0
    --------------
     
    Appuyez sur une touche pour continuer...
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/08/2011, 10h36
  2. impossible de mettre à jour une colonne.
    Par yass dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 18/06/2009, 09h58
  3. Comment mettre à jour un champ BLOB avec une TIBQUERY ?
    Par colorid dans le forum Bases de données
    Réponses: 4
    Dernier message: 26/02/2008, 19h00
  4. ADO- Impossible de mettre à jour une table sans primary key.
    Par Mr_Welby dans le forum Accès aux données
    Réponses: 3
    Dernier message: 26/05/2007, 14h26
  5. impossible de mettre à jour une liste déroulante
    Par nicolovitch dans le forum Access
    Réponses: 3
    Dernier message: 02/08/2006, 11h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo