mysql - 如何通过mysql从磁盘文件中搜索数据?
问题描述
我想用这个 mysql select 来获取本地文件数据。
SELECT
body
FROM posts
WHERE
id in (load_file("/Users/abc/sql/ids"));
什么在/Users/abc/sql/ids
:
1,2,3
它没有导致错误,但没有得到结果。
在这种情况下如何使用它?
解决方案
这将起作用(在 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
. (改变很容易)
编辑(关于 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 注入!
推荐阅读
- c# - 正在拖动的 TreeList 节点字段未在数据库表中更新
- python-3.x - 如何隐藏/删除 mayavi 管道?
- twitter-bootstrap - 建议下拉菜单覆盖日期选择器
- python - django 和 sorl.thumbnail 模型字段的问题
- angular - Angular Universal,如何将带有声明的模块与服务器端执行隔离开来?
- php - 在服务器中访问远程mysql数据库laravel
- python - 检测键盘输入
- java - 验证组接口放在哪里?
- linux - xdg-mime 安装不更新文件 mime 类型关联
- javascript - 网页中的经典富文本格式