Php 卡桑德拉用集合准备了报表
我已经开始使用DataStax PHP驱动程序在PHP中学习Cassandra,我必须使用准备好的语句在CQL中设置映射值,查询是: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
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