Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 卡桑德拉用集合准备了报表_Php_Cassandra_Prepared Statement_Cql - Fatal编程技术网

Php 卡桑德拉用集合准备了报表

Php 卡桑德拉用集合准备了报表,php,cassandra,prepared-statement,cql,Php,Cassandra,Prepared Statement,Cql,我已经开始使用DataStax PHP驱动程序在PHP中学习Cassandra,我必须使用准备好的语句在CQL中设置映射值,查询是: INSERT INTO users (name, attributes, mail, password) VALUES (?, ?, ?, ?); “attributes”字段是一种映射类型,因此我尝试将其作为字符串传递: {'address':'address...','phone':'phone...'} 在PHP中: $attr = "{'address

我已经开始使用DataStax PHP驱动程序在PHP中学习Cassandra,我必须使用准备好的语句在CQL中设置映射值,查询是:

INSERT INTO users (name, attributes, mail, password) VALUES (?, ?, ?, ?);
“attributes”字段是一种映射类型,因此我尝试将其作为字符串传递:

{'address':'address...','phone':'phone...'}
在PHP中:

$attr = "{'address':'address...','phone':'phone...'}";
$statement = $session->prepare("INSERT INTO users (name, attributes, mail, password) VALUES (?, ?, ?, ?);");
$session->execute($statement, new Cassandra\ExecutionOptions(array('arguments' => array($name, $attr, $mail, $password))));

但是我得到了错误“java.lang.IllegalArgumentException”,这是像预处理语句中的映射或列表这样的集合的正确语法?

首先,在php中创建一个映射或列表。然后在BatchStation中提供该映射或列表的对象。你可以再做一次;不创建批处理。直接编写查询,您可以像已经通过一样进行传递

以防它能为其他人节省一些时间

我的“目标”列是一个集合,而不是一个映射-但希望相同的原则适用于任何集合。我发现下面的代码可以删除批处理语句中“targets”集合的特定元素:

$batch = new Cassandra\BatchStatement(Cassandra::BATCH_LOGGED);
$deleteTargetStmt = "DELETE targets[?] FROM $this->keyspace.user WHERE userid=?";
$targetPrepStmt = $this->session->prepare($deleteTargetStmt);
$batch->add($targetPrepStmt, array(new Cassandra\Timeuuid($targetId), new Cassandra\Uuid($userId)));
... other batch statement ommitted ...
$this->session->execute($batch);
事实上,这实际上与未准备语句的语法相同。但我花了很长时间才发现我必须在add的参数上调用新的Timeuuid和Uuid