我是mysql的初学者,想在mysql表格单元格中插入一个图片但是没有更新。
update studentDetails set studentPic = LOAD_FILE('/images/picture.jpg') where studentID = 4;
请帮忙!
答案 0 :(得分:0)
LOAD_FILE()
MySQL函数文档的快速摘录:
LOAD_FILE(file_name)
读取文件并以字符串形式返回文件内容。要使用此功能,文件必须位于服务器主机上,您必须指定文件的完整路径名,并且您必须具有
FILE
权限。该文件必须全部可读,其大小小于max_allowed_packet
个字节。如果secure_file_priv
系统变量设置为非空目录名,则要加载的文件必须位于该目录中。如果由于不满足上述条件之一而导致文件不存在或无法读取,则函数返回
NULL
。
如您所见,您对LOAD_FILE()
的调用失败的原因有很多:
该文件必须存在于运行MySQL服务器的计算机上。这并不总是与PHP脚本运行的计算机相同(出于安全原因,这种情况会发生)。如果它们在不同的计算机上运行,那么很可能您无法使用LOAD_FILE()
。案件结案。
理论上,您可以使用FTP
或SFTP
在运行MySQL的计算机上传输文件,但出于同样的安全原因,您可能无法访问该计算机。
假设在您的情况下,PHP和MySQL都在同一台计算机上运行,/images/picture.jpg
是URL的路径组件,而不是文件系统上的路径。您可以使用dirname()
和__DIR__
从当前脚本的路径开始撰写images
目录的路径。
用于连接MySQL服务器的用户必须具有FILE
权限。 DBA将权限授予用户。
所有人都必须阅读该文件。这是最简单的部分。在文件上运行ls -l
时,文件权限列中的最后三个符号必须是rw-
或r--
(没有设置可执行位的点。)
max_allowed_packet
系统变量的默认值为4 MiB
,但DBA可以更改它。您可以运行SELECT @@max_allowed_packet FROM dual
来查找其当前值。
如果设置了secure_file_priv
系统变量,那么您提供的路径必须相对于此目录。同样,您可以运行SELECT @@secure_file_priv FROM dual
来查找其当前值。