Mysql
 sql >> Database >  >> RDS >> Mysql

La funzione load_file non funziona in mysql

Un rapido estratto dalla documentazione di LOAD_FILE() Funzione MySQL:

Come puoi vedere, ci sono una miriade di ragioni per cui chiami LOAD_FILE() fallisce:

  1. Il file deve essere presente sul computer su cui è in esecuzione il server MySQL. Questo non è sempre lo stesso computer su cui viene eseguito lo script PHP (e questo accade per motivi di sicurezza). Se vengono eseguiti su computer diversi, molto probabilmente non puoi utilizzare LOAD_FILE() . Caso chiuso.

    In teoria potresti usare FTP o SFTP per trasferire il file sul computer su cui è in esecuzione MySQL ma per gli stessi motivi di sicurezza, probabilmente non hai accesso a quel computer.

  2. Supponendo che nel tuo caso sia PHP che MySQL vengano eseguiti sullo stesso computer, /images/picture.jpg è il componente del percorso dell'URL, non un percorso nel file system. Puoi utilizzare dirname() e __DIR__ per comporre il percorso delle images directory a partire dal percorso dello script corrente.

  3. L'utente che utilizzi per connetterti al server MySQL deve avere il FILE privilegio. Il privilegio è concesso all'utente da un DBA.

  4. Il file deve essere leggibile da tutti. Questa è la parte più semplice. Quando esegui ls -l sul file, gli ultimi tre simboli nella colonna dei diritti del file devono essere rw- o r-- (non ha senso avere il bit eseguibile impostato).

  5. Il valore predefinito di max_allowed_packet la variabile di sistema è 4 MiB ma un DBA può cambiarlo. Puoi eseguire SELECT @@max_allowed_packet FROM dual per scoprirne il valore attuale.

  6. Se secure_file_priv la variabile di sistema è impostata, quindi il percorso fornito deve essere relativo a questa directory. Ancora una volta, puoi eseguire SELECT @@secure_file_priv FROM dual per trovare il suo valore attuale.