【问题标题】:Perl equivalent of PHP mysqli_data_seekPerl 等效于 PHP mysqli_data_seek
【发布时间】:2014-09-29 14:53:14
【问题描述】:

PHP mysqli_data_seek 将结果指针调整到结果中的任意行。

使用DBIDBD::mysql 是否有与PHP mysqli_data_seek 函数等效的Perl?

【问题讨论】:

  • 为什么不直接使用LIMIT
  • 那每次都需要一个新的查询。我只想运行一次查询。我在 PHP 脚本中使用 mysqli_data_seek 函数并发现它很有价值。我现在需要 Perl 中的等效函数。我可以重新运行查询,但这似乎是一种浪费。
  • 是的,但是每个查询获取的数据要少得多。这是用于寻呼还是类似的东西?
  • 我不使用 PHP,但根据我对 docs 的阅读,mysqli_data_seek 只能使用 buffered queries,它将所有结果读入内存。您可以使用fetchall_selectall_ 方法之一使用DBI 模拟此操作,并使用数组索引或哈希键来获取您感兴趣的行。将所有内容读入内存将无法获得非常大的结果集(使用 PHP 或 Perl),因此如果您的查询返回大量数据,您应该使用 LIMIT
  • 该文档适用于完全不同的过时模块Mysql.pm(及其伙伴Msql.pm)。在 v4.x 之前,它包含在 DBD::mysql 发行版 中。据我所知,DBD::mysql 从未记录过 dataseek 函数,尽管 ikegami 在 XS 源代码中找到了它。重申一下,通过将查询的所有结果存储在一个数组中并对其进行索引,您将获得完全相同的功能。

标签: php mysql perl dbi


【解决方案1】:

$query->dataseek($row_number);

【讨论】:

  • 请注意,它是undocumented(但看看source 就会发现)。
  • $query 应该是语句句柄吗?我得到Can't locate object method "dataseek" via package "DBI::st"
  • 你需要上面ikegami链接的包
  • @BrianG 查看对您问题的评论。您发现的是一个完全独立的过时模块。
  • 我直接与 DBD::mysql 的开发人员 Patrick Galbraith 进行了沟通,他提供了我认为很有帮助的答案。 “dataseek() 是一个旧的预 DBI 函数,我不推荐使用它,因此驱动程序将符合当代 DBI 驱动程序。我认为有某种包装库这样做可能值得这样做,尽管你是第一个注意到它丢失的人。 "
猜你喜欢
  • 2011-03-13
  • 2012-02-24
  • 2011-11-13
  • 2011-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-30
  • 2012-03-31
相关资源
最近更新 更多