2

我很想这样做:

UPDATE table SET blobCol = HTTPGET(urlCol) WHERE whatever LIMIT n;

是否有可用的代码来执行此操作?我知道这应该是可能的,因为MySQL Docs包含一个添加执行 DNS 查找的函数的示例。

MySQL/windows/最好不用编译东西,不过我可以。

(如果你没有听说过这样的事情,但你会期望如果它确实存在的话,那么“proly not”会很好。)

编辑:我知道这会打开一个完整的 can-o-worms re 安全性,但是在我的情况下,对数据库的唯一访问是通过 mysql 控制台应用程序。它不是一个世界可访问的系统。它不是 Web 后端。它只是一个本地数据记录系统

4

4 回答 4

6

不,谢天谢地——这将是一个安全隐患。应用程序中的每个 SQL 注入漏洞都可能被用来开始发送垃圾邮件连接以攻击其他站点。

我想,您可以用 C 语言编写它并将其编译为 UDF。但我认为与仅在应用程序层中选择并循环执行 HTTP GET 和更新结果相比,它并不能真正为您带来任何好处。如果我们谈论的是建立 HTTP 连接,那么在数据库层执行此操作的额外效率将完全被网络延迟所抵消。

于 2008-11-15T13:14:01.157 回答
2

作为 MySQL 的一部分,我不知道有任何类似的功能。您只是想从许多 URL 中检索 HTML 数据吗?

另一种解决方案可能是使用 Google 电子表格的 importHtml 函数。

Google 电子表格可让您导入在线数据

于 2008-11-14T23:50:42.633 回答
0

不能。Web 环境中的最佳实践是使数据库服务器与外部隔离,双向,这意味着不允许数据库服务器从 Internet 获取内容。

于 2008-11-15T13:17:36.470 回答
0

不能。

如果您绝对决心从 SQL 环境中获取 Web 内容,据我所知有两种可能性:

  1. 用 C 编写自定义 MySQL UDF(如 bobince 所述)。这可能是一项艰巨的工作,具体取决于您对 C 的经验、您想要多少安全性、您希望 UDF 有多完整:例如。只是 GET 请求?邮政呢?头?等等

  2. 使用可以执行此操作的其他数据库。如果您对 SQL 感到满意,您可能可以使用 PostgreSQL 和其中一种管理单元语言(如 Python 或 PHP)来做到这一点。

如果您对坚持使用 SQL 不太在意,则可以使用eXist 之类的东西。您可以使用 XQuery 相对轻松地执行此类操作,并且能够轻松修改结果以适合您的模式(而不是将其集中到 blob 字段中)或将页面“按原样”存储为 xhtml doc在数据库中。

然后,您可以在所有文档中非常快速地运行查询,例如,获取所有链接或引号等。您甚至可以用很少的额外工作将 XSL 应用于这样的结果。如果您要存储页面以供参考,并希望将结果调整为个人“内部网”风格的应用程序,那就太好了。

此外,由于 eXist 是以文档为中心的,它有很多很好的模糊文本搜索、近词搜索的方法,并且有很好的全文索引(比 MySQL 的要好得多)。如果您在对内容进行一些数据挖掘之后是完美的,例如:找到所有文档,其中包含“热狗”的 50 个单词中的“汉堡”之类的单词不在 UL 列表中。尝试在 MySQL 中进行本机操作

顺便说一句,并没有恶意;我经常想知道为什么人们在构建 CMS 时忽略了 eXist。它是一个数据库,可以以其原生格式(XML 或其子集 (x)HTML)存储内容,以其原生格式轻松查询它并可以使用强大的模板语言将其从其原生格式翻译,其外观和行为类似于它的原生格式有时 SQL 完全不适合这项工作!

对不起。不是故意胡说八道的!:-$

于 2008-11-15T22:51:37.107 回答