load_file函数在mysql中不起作用

时间:2017-09-04 12:34:30

标签: mysql

我是mysql的初学者,想在mysql表格单元格中插入一个图片但是没有更新。

update studentDetails set studentPic = LOAD_FILE('/images/picture.jpg') where studentID = 4;

请帮忙!

1 个答案:

答案 0 :(得分:0)

LOAD_FILE() MySQL函数文档的快速摘录:

  

LOAD_FILE(file_name)

     

读取文件并以字符串形式返回文件内容。要使用此功能,文件必须位于服务器主机上,您必须指定文件的完整路径名,并且您必须具有FILE权限。该文件必须全部可读,其大小小于max_allowed_packet个字节。如果secure_file_priv系统变量设置为非空目录名,则要加载的文件必须位于该目录中。

     

如果由于不满足上述条件之一而导致文件不存在或无法读取,则函数返回NULL

如您所见,您对LOAD_FILE()的调用失败的原因有很多:

  1. 该文件必须存在于运行MySQL服务器的计算机上。这并不总是与PHP脚本运行的计算机相同(出于安全原因,这种情况会发生)。如果它们在不同的计算机上运行,​​那么很可能您无法使用LOAD_FILE()。案件结案。

    理论上,您可以使用FTPSFTP在运行MySQL的计算机上传输文件,但出于同样的安全原因,您可能无法访问该计算机。

  2. 假设在您的情况下,PHP和MySQL都在同一台计算机上运行,​​/images/picture.jpg是URL的路径组件,而不是文件系统上的路径。您可以使用dirname()__DIR__从当前脚本的路径开始撰写images目录的路径。

  3. 用于连接MySQL服务器的用户必须具有FILE权限。 DBA将权限授予用户。

  4. 所有人都必须阅读该文件。这是最简单的部分。在文件上运行ls -l时,文件权限列中的最后三个符号必须是rw-r--(没有设置可执行位的点。)

  5. max_allowed_packet系统变量的默认值为4 MiB,但DBA可以更改它。您可以运行SELECT @@max_allowed_packet FROM dual来查找其当前值。

  6. 如果设置了secure_file_priv系统变量,那么您提供的路径必须相对于此目录。同样,您可以运行SELECT @@secure_file_priv FROM dual来查找其当前值。