【问题标题】:php: pdo read clob without bindphp: pdo 读取 clob 没有绑定
【发布时间】:2012-02-15 02:52:56
【问题描述】:
$query = "select id, xmldata from xmlcontent where id = '586655' OR id = '671347'"

$db = new PDO(...);
$stmt = $db->prepare($query);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

var_dump($result);

输出:

...
["XMLDATA"]=> resource(33) of type (stream)
...

我怎么能读到这个?我试试:

stream_get_contents()

什么都没有

stream_get_contents()

有时会阅读一些小文本,我想使用所有 SQL-s 中的通用代码,而无需绑定参数:(

【问题讨论】:

  • 如果您在资源上调用stream_get_meta_data 会发生什么?你应该得到一个包含有用信息的数组。
  • 我会在星期一回来工作的时候尝试一下,谢谢:)
  • Array ([stream_type] => pdo_oci blob stream [mode] => r+b [unread_bytes] => 0 [seekable] => [timed_out] => [blocked] => 1 [eof ] => ) @查尔斯
  • 因此,它是只读的,不可搜索,不可 eof,并且 阻止。这很奇怪。不幸的是,我没有任何建议......
  • 出于好奇,您使用的是Oracle数据库吗?

标签: php oracle pdo clob oracle-call-interface


【解决方案1】:

也许您正尝试从同一个流中读取两次,或者只是使用带有错误的旧 pdo_oci 库(在多条记录上只会返回最后一个流)。

对于最后一个版本,从 Ubuntu 服务器上的 php 源编译,我只是在 ActiveRecord 类中使用延迟加载:

public function getFullText()
{
    if (is_resource($this->fulltext)) {
        $this->fulltext = stream_get_contents($this->fulltext);
    }
    return $this->fulltext;
}

fulltextCLOB

【讨论】:

  • PDO_OCI 已被弃用,我可以编译它来探测它:(
  • 已弃用?我以为它只是因为 PHP 本身的内置版本而被放弃作为独立扩展?
  • repos 中没有 php 的 oracle pdo 扩展
  • PHP 本身内置的。
  • Best answer i've found 不过,您会在使用 Oracle 和 PDO_OCI 时遇到很多问题。例如,BLOB 和 CLOB。我现在设法解决了大部分问题,但这不是明显的问题。
猜你喜欢
  • 2019-04-03
  • 2013-03-08
  • 2014-02-02
  • 2013-03-07
  • 2012-04-27
  • 1970-01-01
  • 1970-01-01
  • 2013-02-17
相关资源
最近更新 更多