Ignite:使用PHP PDO选择问题

时间:2018-04-16 07:11:57

标签: ignite

使用PHP PDO访问Ignite群集。

1)使用PHP PDO脚本创建表。

生成的缓存在Ignite Web控制台中可见。

SQL SELECTs / INSERT可以从Ignite Web控制台发出。

可以使用独立的PHP PDO发出SQL INSERT。

因此SQL表/缓存似乎完全正常,但是:

2)PHP PDO脚本内部的SELECT失败。

PHP PDO脚本与Ignite站点上提供的示例脚本基本相同。

<?php
try {
    $dbh=new PDO('odbc:ApacheIgniteDSN');
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $res=$dbh->query('SELECT id from Person');
// no errors up to here
//exit;
    if ($res == FALSE)
        print_r("Exception");

    // the following results in errors
    foreach($res as $row) {
        print_r($row);
    }
}
catch (PDOException $e) {
    print "Error: " . $e->getMessage() . "\n";
    exit;
}*

从命令行运行时,它会生成:

  

错误:SQLSTATE [HYC00]:未实现可选功能:0已指定   属性不受支持。 (SQLFetchScroll [0] at   分机\ PDO_ODBC \ odbc_stmt.c:543)

这不是很有用,但在Ignite节点上会记录以下内容:

[17:00:30,074][SEVERE][grid-nio-worker-client-listener-0-#30][ClientListenerProcessor] Failed to process selector key [ses=GridSelectorNioSessionImpl [worker=ByteBufferNioClientWorker [readBuf=java.nio.HeapByteBuffer[pos=0 lim=8192 cap=8192], super=AbstractNioClientWorker [idx=0, bytesRcvd=0, bytesSent=0, bytesRcvd0=0, bytesSent0=0, select=true, super=GridWorker [name=grid-nio-worker-client-listener-0, igniteInstanceName=null, finished=false, hashCode=1314397987, interrupted=false, runner=grid-nio-worker-client-listener-0-#30]]], writeBuf=null, readBuf=null, inRecovery=null, outRecovery=null, super=GridNioSessionImpl [locAddr=/100.96.3.26:10805, rmtAddr=/100.96.3.1:6733, createTime=1523811628969, closeTime=0, bytesSent=69, bytesRcvd=75, bytesSent0=69, bytesRcvd0=75, sndSchedTime=1523811629031, lastSndTime=1523811629031, lastRcvTime=1523811629020, readsPaused=false, filterChain=FilterChain[filters=[GridNioAsyncNotifyFilter, GridNioCodecFilter [parser=ClientListenerBufferedParser, directMode=false]], accepted=true]]]
java.io.IOException: Connection reset by peer

请注意,我使用CREATE TABLE命令(来自PHP PDO脚本)创建了SQL表,而不是使用queryEntities在缓存中显式指定它。但是,Web控制台可以正确地看到它并且您可以在那里查询它,因此可以假设PDO中的SELECT也可以工作,但它不会。

1 个答案:

答案 0 :(得分:0)

这是一个known issue,它是由MS游标库引起的,在某些情况下显然是由PDO使用的。它已被修复,并且补丁已经合并为主要的Ignite的Jira状态,因此您可以等待2.5版本,或者使用主分支代码。