如何在 Cakephp 3 中调用 PDOStatement::nextRowset()

2024-02-18

我创建了一个过程,其中有两个 select 语句正在运行。

$stmt = $this->_connection->execute("CALL myFunction(:user_id)", [
    'user_id' => $userId
]);

但是当我尝试像这样调用 nextRowset() 时

$stmt->nextRowset();

它给了我错误

调用未定义的方法 Cake\Database\Log\LoggingStatement::nextRowset()

所以,我的问题是如何在 Cakephp 3 中调用 nextRowset()


鉴于所有核心语句类都扩展了\Cake\Database\Statement\StatementDecorator在某些时候,您可以访问底层的本机\PDOStatement对象通过StatementDecorator::getInnerStatement(), like:

while ($stmt instanceof StatementDecorator) {
    $stmt = $stmt->getInnerStatement();
}

if (!($stmt instanceof \PDOStatement)) {
    throw new \RuntimeException('Expected an instance of \PDOStatement');
}

然后您可以使用标准 PDO 语句过程,例如在循环中迭代行集:

do {
    $rowset = $stmt->fetchAll(PDO::FETCH_ASSOC);
    // ...
} while ($stmt->nextRowset());

正如评论中已经提到的,另一种方法是实现您自己的语句类(并使您的代码期望该具体实现的实例)。为了跨数据库兼容性,您必须实现四个不同的语句,再加上四个您需要重新实现的驱动程序\Cake\Database\Driver::prepare(),因为这是生成语句实例的地方。

另外,如果您想支持查询日志记录,则必须创建自定义连接类并覆盖\Cake\Database\Connection::prepare() or \Cake\Database\Connection::_newLogger(),因为这是驱动程序生成的语句被包装在的地方\Cake\Database\Log\LoggingStatement如果启用了查询日志记录。

我想说,如果您想要支持的只是内置驱动程序,那么期望\Cake\Database\Statement\StatementDecorator实例可能是目前更好的选择,尽管它不是很好。你可能想要建议添加功能 https://github.com/cakephp/cakephp/issues对于推进多行集语句作为增强功能,不确定是否会有很多支持。

See also

  • API > \Cake\Database\Statement\StatementDecorator::getInnerStatement() https://api.cakephp.org/3.3/class-Cake.Database.Statement.StatementDecorator.html#_getInnerStatement
  • API > \Cake\Database\Driver::prepare() https://api.cakephp.org/3.3/class-Cake.Database.Driver.html#_prepare
  • API > \Cake\Database\Connection::prepare() https://api.cakephp.org/3.3/class-Cake.Database.Connection.html#_prepare
  • API > \Cake\Database\Connection::_newLogger() https://api.cakephp.org/3.3/class-Cake.Database.Connection.html#__newLogger
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Cakephp 3 中调用 PDOStatement::nextRowset() 的相关文章

  • PDO::bindValue() 在使用嵌套 SELECT 进行查询时失败

    我正在使用通过 ODBC 连接的 MSSQL 数据库 使用时PDO bindValue 在具有嵌套 SELECT 语句的查询上 它无法绑定嵌套 SELECT 中的值 在主 SELECT 上没有问题 这是一段失败的示例代码 stmt cmdb
  • Laravel Eloquent 更新(如果已进行更改)

    如果记录发生更改 是否有任何方法可以使用 eloquent 模型更新 Laravel 中的记录 我不希望任何用户无缘无故地一遍又一遍地请求数据库 只需点击按钮即可保存更改 我有一个javascript根据页面中是否发生更改来启用和禁用保存按
  • 使用php显示.txt文件的内容

    使用此代码 我可以显示文件夹中任何txt文件的内容 问题是 txt 文件中的所有格式等都被跳过 txt 文件看起来像 nipponsei irc rizon net presents Title Ah My Goddess Sorezore
  • 更改数组键而不更改顺序

    You can 更改 数组元素的键 https stackoverflow com questions 240660 in php how do you change the key of an array element只需设置新密钥并删
  • wp_enqueue_script 用于小部件表单

    我正在创建一个小部件 我需要在管理面板 和定制器 中将小部件表单的脚本排入队列 我尝试了很多方法 function cf enqueue admin script wp enqueue script admin custom script
  • MySQL/PHP 插入同一行两次

    我不明白为什么这段代码会插入同一行两次 我已经将其精简为以下代码 它被插入的 MySQL 表中有 10 列 但即使查询中提到了所有这些列 它仍然插入 电子邮件受保护 cdn cgi l email protection 分两行 具有单独的主
  • PHP Microsoft Excel 文件生成/导出类

    我一直在寻找一个好的 Excel 文件生成类 但还没有找到 我的首要问题是 虽然我可以在 Excel 中打开导出的文件 运行 2007 年 但我总是收到一条警告 文件的格式与文件扩展名不同 我注意到 phpMyAdmin 中的 Excel
  • 如何在 Laravel 中将秒转换为天小时分钟[重复]

    这个问题在这里已经有答案了 我想将以秒为单位的时间间隔转换为天小时分钟 我已经尝试过了 value 90060 CarbonInterval seconds value gt forHumans 我得到了输出 90060 seconds 我
  • 将mysql数据导入kubernetes pod

    有谁知道如何将我的 dump sql 文件中的数据导入到 kubernetes pod 中 直接 与处理 docker 容器的方式相同 docker exec i container name mysql uroot password se
  • PHP中如何判断字母是大写还是小写?

    我有 UTF 8 格式的文本 也带有变音符号 并且想检查该文本的第一个字母是大写还是小写 这个怎么做 function starts with upper str chr mb substr str 0 1 UTF 8 return mb
  • 使用WordPress get_results()数据库函数是否可以防止sql注入

    似乎找不到答案 但想知道以下对数据库的查询是否容易受到 SQL 注入的攻击 searchPostResults wpdb gt get results querySearchVals OBJECT 这是使用的查询 global wpdb o
  • 通过 PHP 将 CSV 导入 MYSQL

    我正在将 CSV 文件导入到我的管理区域 并且我想将文件添加到我的数据库中 我的 PHP 代码import php is
  • 无需源代码即可部署网站

    我用php开发了网站 我想在没有源代码的情况下部署它 用php可以吗 我可以将网站代码转换为某种中间形式然后进行部署吗 您可以使用 Zend Guard 来编码您的代码 这样它就无法被逆向工程 http www zend com en pr
  • PHP 会话不会在每个请求上延长 Cookie 过期时间

    session start 是否应该通过 session gc maxlifetime 变量来延长会话 ID cookie 的寿命 我的 session gc maxlifetime 是 24 分钟 每个会话仅存活 24 分钟 无论网站上有
  • 如何在 Zend 中使用 cookie?

    如何使用 Zend Http Cookie 来设置和读取 cookie 我尝试像这样设置cookie cookie new Zend Http Cookie TestCookie TestValue localhost com 但没有生成c
  • 如何准备更新查询语句? [复制]

    这个问题在这里已经有答案了 我有一个 mysqli 查询 代码如下 db usag gt query UPDATE Applicant SET phone number phone number street name street nam
  • 在 PHP 中,如何检测由于超出 max_input_vars 而导致输入变量被截断?

    我知道一个E WARNING由 PHP 生成 PHP 警告 未知 输入变量超过 1000 https stackoverflow com q 9673895 367456 但我如何在我的脚本中检测到这一点 一个 足够接近 的方法是检查if
  • 两边带有感叹号的正则表达式 ('!\d!')

    我见过正则表达式 d PHP 内部preg match功能 这到底是什么 来自PHP PCRE 文档 http php net manual en regexp reference delimiters php 使用 PCRE 函数时 要求
  • R 语言与 php 集成以获取 R 的结果

    我有以下 R 脚本 assign data path data path lt C Users Owner Desktop R work assign valus to the following three percent train p
  • 参考指南:这个符号在PHP中是什么意思? (PHP 语法)

    这是什么 这是关于 PHP 语法时不时出现的问题的集合 这也是一个社区 Wiki 因此邀请每个人参与维护此列表 为什么是这样 过去很难找到有关运算符和其他语法标记的问题 主要思想是提供 Stack Overflow 上现有问题的链接 这样我

随机推荐