Cassandra准备的语句错误与datastax php驱动程序

奥姆贝

我在使用DataStax php驱动程序1.0.0-rc和Cassandra 2.2.3的Prepared Statements遇到奇怪的错误。我在这条线上有一个异常:

$statement = $this->session->prepare("SELECT ? FROM ? WHERE ? = ?");

我看到此错误:

"error_code":33562624
"error_message":"Bind variables cannot be used for keyspace names"

在用于与Cassandra通信的类的下面:

class ClsCassandra extends ClsDbObject
{
    private $hostname="";
    private $username="";
    private $password="";
    private $keyspace="";
    private $poi_table="";
    private $poi_table_key_field="";
    private $poi_table_content_field="";

    private $cluster = NULL;
    private $session = NULL;

    private $threads = 1;

    function __construct()
    {
        ...
        ...
        //
        // i set up all the properties above
        //
        ...
        ...
    }

    public function runQuery(&$error)
    {
        try 
        {           
            $this->cluster   = Cassandra::cluster()
            ->withContactPoints($this->hostname)
            ->withCredentials($this->username, $this->password)
            ->withIOThreads($this->threads)
            ->build();

            $this->session = $this->cluster->connect($this->keyspace);

            // error on next line...
            $statement = $this->session->prepare("SELECT ? FROM ? WHERE ? = ?");
            $results = $this->session->execute($statement, new Cassandra\ExecutionOptions(array(
                    'arguments' => array($this->poi_table_content_field, $this->poi_table, $this->poi_table_key_field, $keypattern)
            )));

        }
        catch(Cassandra\Exception $ce)
        {
            $error->setError($ce->getCode(), $ce->getMessage(), $ce->getTraceAsString());
            $this->log(LOG_LEVEL, $error->getErrorMessage(), __FILE__, __LINE__, __CLASS__);
            return false;
        }
        return true;
    }

    ...
    ...
    ...
}

如果我将Simple Statemetn与标准选择查询结合使用,则可以使用。

有什么建议么?

亚伦

您看到此错误是因为您只能将变量绑定到WHERE子句。准备好的语句机制不仅是美化的字符串格式化程序。它具有关于可以绑定和不能绑定的规则,以及在发送给Cassandra时如何绑定东西以消除任何歧义的规则。

您需要尝试如下操作:

$statement = $this->session->prepare(
    "SELECT key1, key2, col1, col2 FROM yourKeyspaceName.yourTableName WHERE key1 = ? AND key2 = ?");
$results = $this->session->execute($statement, new Cassandra\ExecutionOptions(array(
    'arguments' => array($key1,$key2)
    )));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Cassandra中使用Datastax Java驱动程序有效地使用准备好的语句?

Cassandra Node.js DataStax驱动程序不会通过准备好的语句执行返回新添加的列

Datastax-Cassandra PHP驱动程序-执行CQL脚本

Datastax Java Cassandra驱动程序:使用WHERE的多个AND语句?

来自准备好的语句的 Cassandra PHP 驱动程序 502 badgateway

DataStax Python Cassandra 驱动程序错误地发现本地主机上的 Cassandra

Datastax Cassandra PHP驱动程序:如何知道CQL INSERT,UPDATE,DELETE成功

在MAMP上为Cassandra安装PHP驱动程序

Cassandra如何处理Datastax Java驱动程序中的阻塞执行语句

datastax cassandra驱动程序:如何从ResultSet列表中为插入语句返回成功或失败

是否可以通过Cassandra Datastax驱动程序从文件加载语句?

PHP Postgres PDO驱动程序不支持准备好的语句吗?

使用准备好的语句时,Cassandra中的python驱动程序出现问题

php artisan migrate命令错误:找不到驱动程序

解析PHP Web驱动程序中的错误

Cassandra Java驱动程序连接错误

使用 Datastax Cassandra 驱动程序时出现无效类型错误

cassandra datastax驱动程序抛出的写入超时

Cassandra Datastax驱动程序-连接池

Cassandra DataStax驱动程序:如何分页浏览

Datastax Cassandra Java驱动程序的Accessor是否使用分页?

datastax cassandra java驱动程序PlainTextAuthProvider示例

Cassandra模型的CQL(datastax驱动程序:python)

Datastax Cassandra驱动程序(python)导入失败

Datastax C#驱动程序中的Cassandra timeuuid

带分页的Datastax Cassandra Java驱动程序RetryPolicy

Nodejs - Apache Cassandra(使用 Datastax 驱动程序)

Ojdbc驱动程序错误

PHP准备的语句错误