Mysql
 sql >> Base de données >  >> RDS >> Mysql

La fonction load_file ne fonctionne pas dans mysql

Un extrait rapide de la documentation de LOAD_FILE() Fonction MySQL :

Comme vous pouvez le voir, il y a des myriades de raisons pour lesquelles votre appel à LOAD_FILE() échoue :

  1. Le fichier doit être présent sur l'ordinateur sur lequel le serveur MySQL s'exécute. Ce n'est pas toujours le même ordinateur que celui sur lequel le script PHP s'exécute (et cela se produit pour des raisons de sécurité). S'ils s'exécutent sur des ordinateurs différents, vous ne pouvez probablement pas utiliser LOAD_FILE() . Affaire close.

    En théorie, vous pourriez utiliser FTP ou SFTP pour transférer le fichier sur l'ordinateur sur lequel MySQL s'exécute, mais pour les mêmes raisons de sécurité, vous n'avez probablement pas accès à cet ordinateur.

  2. En supposant dans votre cas que PHP et MySQL s'exécutent sur le même ordinateur, /images/picture.jpg est le composant de chemin de l'URL, pas un chemin sur le système de fichiers. Vous pouvez utiliser dirname() et __DIR__ pour composer le chemin vers les images répertoire à partir du chemin du script en cours.

  3. L'utilisateur que vous utilisez pour vous connecter au serveur MySQL doit avoir le FILE privilège. Le privilège est accordé à l'utilisateur par un DBA.

  4. Le fichier doit être lisible par tous. C'est la partie la plus facile. Lorsque vous exécutez ls -l sur le fichier, les trois derniers symboles de la colonne des droits du fichier doivent être rw- ou r-- (il est inutile d'avoir le bit exécutable défini).

  5. La valeur par défaut de max_allowed_packet la variable système est 4 MiB mais un DBA peut le changer. Vous pouvez exécuter SELECT @@max_allowed_packet FROM dual pour connaître sa valeur actuelle.

  6. Si le secure_file_priv variable système est définie, le chemin que vous fournissez doit être relatif à ce répertoire. Encore une fois, vous pouvez exécuter SELECT @@secure_file_priv FROM dual pour trouver sa valeur actuelle.