【问题标题】:MySQL LOAD_FILE returning NULLMySQL LOAD_FILE 返回 NULL
【发布时间】:2011-06-04 04:43:06
【问题描述】:

我正在这样做SELECT LOAD_FILE("/home/user/domains/example.com/public_html/robots.txt") AS tmp FROM tmpTable,但它返回 NULL。我如何检查这是因为我没有 FILE 权限还是其他原因? MySQL不会给出错误。 (我正在使用 PHP)

任何有 LOAD_FILE 经验的人,请告诉我该功能:)

<?php
$result = mysql_query('SELECT LOAD_FILE("/home/user/domains/example.com/public_html/robots.txt") AS tmp FROM tmpTable') or die(mysql_error());
while($row = mysql_fetch_assoc($result))
{
var_dump( $row['tmp'] );
}

【问题讨论】:

  • 请显示您用于运行查询的完整代码
  • 这是完整代码(测试代码)
  • 您授予用户权限了吗?将 . 上的文件授予我;
  • 另外我听说 LOAD_FILE 是一个仅限 Windows 的函数,mot Linux:forums.mysql.com/read.php?20,218333
  • 只有“USAGE”权限(共享主机)

标签: php mysql mysql-loadfile


【解决方案1】:

Linux 发行版上的某些 MySQL 版本似乎存在 LOAD_FILE 函数的错误。这里是the thread。在线程的最后看起来可能有一种解决方法。

编辑:

由于您在共享主机上,查看您想要的功能是否可以直接读取文件?使用file() 应该将文件读入数组格式。

【讨论】:

    【解决方案2】:

    在这里可以找到一个非常丑陋的解决方法:

    http://angkatbahu.blogspot.com.es/2011/03/mysql-loadfile-function-in-ubuntu-it_12.html

    如果你把要加载的文件放在/var/lib/mysql/all_images目录下,就可以了!

    在 ubuntu 12.10 中测试(不,向 mysql 用户发送文件,不起作用)

    【讨论】:

    • 虽然解决方法很糟糕,但我发现您不必将图像放在 /var/lib/mysql/all_images 中。我使用了 /var/lib/mysql/foo_images 并且效果很好。多亏了这一点,我让我的数据库架构安装程序(一个 Debian 包)创建 /var/lib/mysql/foo_images,用图像文件填充它,然后在我的 postinst 中运行我的 SQL 充满 LOAD_FILEs 然后删除 /var/lib/ mysql/foo_images。最终结果是完全干净的,很少有机会搞砸 MySQL 安装,而且中间阶段也不算太糟糕。我很满意。
    • 其他目录失败的原因是apparmor block
    • 这个技巧也适用于我在 Ubuntu 14.04 LTS 上。即把你的文件放在/var/lib/mysql/目录下,然后使用相对文件名,例如LOAD_FILE('foobar.txt')会加载/var/lib/mysql/foobar.txt
    【解决方案3】:

    要查看您拥有的权限,请使用show grants

    我已经记录了一些额外的命令,你可以用它来检查你是否满足这里的条件:

    http://pastebin.com/Dvsdxh9Y

    我将对文档进行补充。确保:

    • 父目录有执行权限
    • 必须明确授予 FILE 特权。 (在 上授予文件。 到 user@localhost)
    • 您已刷新权限
    • 您已注销并重新登录

    父目录权限示例:

    mysql>\! ls -ld`目录名/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg` drwxrwxr--。 2 jlam jlam 4096 5 月 12 日 14:22 /home/jlam/code/projectName/doc/filesForTesting/images mysql> select hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/image Test01.jpg')); +-------------------------------------------------- -------------------------------------------------- ----------+ | hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg')) | +-------------------------------------------------- -------------------------------------------------- ----------+ |空 | +-------------------------------------------------- -------------------------------------------------- ----------+ 一组中的 1 行(0.00 秒) mysql>\! chmod o+x /home/jlam/code/projectName/doc/filesForTesting/images mysql>\! ls -ld`目录名/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg` drwxrwxr-x。 2 jlam jlam 4096 5 月 12 日 14:22 /home/jlam/code/projectName/doc/filesForTesting/images mysql> select hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg')); +-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------------------------------------- | hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg')) +-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------------------------------------- | FFD8FFE1001845786966000049492A00080000000000000000000000FFEC00114475636B7900010004000000500000FFE10407687474703A2F2F6E732E61646F62652E636F6D2F7861702F312E302F003C3F787061636B657420626567696E3D22EFBBBF222069643D2257354D304D7043656869487 +-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------

    用户权限示例:

    16:38:09 (getImages) ~/code/projectName/doc/filesForTesting/images$ mysql -u eventCal -p eventCal 输入密码: mysql> 显示授权; +-------------------------------------------------- -------------------------------------------------- --------------+ | eventCal@localhost 的赠款 | +-------------------------------------------------- -------------------------------------------------- --------------+ |将 *.* 上的使用权授予 'eventCal'@'localhost' 由密码 '*xxxxx' 识别 | |授予 `tmp` 上的所有权限。* 到 'eventCal'@'localhost' | |授予 `eventCalTesting` 上的所有权限。* 到 'eventCal'@'localhost' | |授予 `eventCal` 上的所有权限。* 到 'eventCal'@'localhost' | |授予 `eventCal_categoryMigration` 上的所有权限。* 到 'eventCal'@'localhost' | +-------------------------------------------------- -------------------------------------------------- --------------+ 5 行一组(0.00 秒) mysql> select hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg')); +-------------------------------------------------- -------------------------------------------------- ----------+ | hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg')) | +-------------------------------------------------- -------------------------------------------------- ----------+ |空 | +-------------------------------------------------- -------------------------------------------------- ----------+ 一组中的 1 行(0.00 秒)

    在其他根会话中:

    mysql> 将文件 ON *.* 授予 eventCal@localhost; 查询正常,0 行受影响(0.00 秒) mysql> 刷新权限; 查询正常,0 行受影响(0.00 秒)

    回到用户会话,我仍然无法加载文件

    mysql> select hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg')); +-------------------------------------------------- -------------------------------------------------- ----------+ | hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg')) | +-------------------------------------------------- -------------------------------------------------- ----------+ |空 | +-------------------------------------------------- -------------------------------------------------- ----------+ 一组中的 1 行(0.00 秒)

    .....但是如果我退出并重新登录:

    mysql>退出 再见 16:40:14 (getImages) ~/code/projectName/doc/filesForTesting/images$ mysql -u eventCal -p eventCal 输入密码: mysql> select hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg')); +-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------------------------------------- | hex(LOAD_FILE('/home/jlam/code/projectName/doc/filesForTesting/images/imageTest01.jpg')) +-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------------------------------------- | FFD8FFE1001845786966000049492A00080000000000000000000000FFEC00114475636B7900010004000000500000FFE10407687474703A2F2F6E732E61646F62652E636F6D2F7861702F312E302F003C3F787061636B657420626567696E3D22EFBBBF222069643D2257354D304D7043656869487 +-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------

    【讨论】:

    • 另外,在ubuntu linux等地方,apparmor可能会干扰。
    猜你喜欢
    • 2013-09-14
    • 2012-04-04
    • 2017-03-16
    • 2017-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多