首页 > 解决方案 > 如何通过mysql从磁盘文件中搜索数据?

问题描述

我想用这个 mysql select 来获取本地文件数据。

SELECT
  body
FROM posts
WHERE
  id in (load_file("/Users/abc/sql/ids"));

什么在/Users/abc/sql/ids

1,2,3

它没有导致错误,但没有得到结果。

在这种情况下如何使用它?

标签: mysql

解决方案


这将起作用(在 MySQL 8.0 以上):

set @a = (select cast(load_file('/temp/abc.txt') as char));
select @a;

set @b = concat('select i from integers where i in (',@a,')');
select @b;

prepare st from @b;
execute st;

在此示例中,我确实从不同的表中进行了选择,但最后您要执行的 SQL 语句应准备@b. (改变很容易)

请参阅:CASTLOAD_FILEPREPARE

编辑(关于 SQL 注入漏洞):

如果abc.txt文件包含如下内容:

1,2;select * from integers;

以上将失败并出现错误ERROR 1243 (HY000): Unknown prepared statement handler (st) given to EXECUTE

这是因为select i from integers where i in (1,2;select * from integers;)不是有效的 SQL 语句。

所以,结论是,是的,可能存在 SQL 注入的可能性,但很难找到一种方法来做到这一点。这不会使上述语句免于 SQL 注入!


推荐阅读