我使用这个驱动程序卡桑德拉badgateway:https://github.com/datastax/php-driver卡桑德拉PHP驱动器502从准备好的声明
这是我用来创建表的代码:
CREATE TABLE test.packages (
packageuuid timeuuid,
ruserid text,
suserid text,
timestamp int,
PRIMARY KEY (ruserid, suserid, packageuuid, timestamp)
);
,然后创建一个物化视图:
CREATE MATERIALIZED VIEW test.packages_by_userid
AS SELECT * FROM test.packages
WHERE ruserid IS NOT NULL
AND suserid IS NOT NULL
AND TIMESTAMP IS NOT NULL
AND packageuuid IS NOT NULL
PRIMARY KEY (ruserid, suserid, timestamp, packageuuid)
WITH CLUSTERING ORDER BY (packageuuid DESC);
,这里是我的PHP代码片段导致502网关:
$session = $cluster->connect($keyspace);
$selectstmt = $session->prepare("SELECT suserid, susername, snickname, msg, savatar, timestamp FROM packages_by_userid WHERE ruserid IN (?, ?) AND suserid IN (?, ?) AND timestamp < ? LIMIT 40;");
$params = array('ruserid' => array($rid, $sid), 'suserid' => array($rid, $sid), 'timestamp' => $endtimestamp);
$options = array('arguments' => $params);
$future = $session->executeAsync($selectstmt, $options);
$result = $future->get();
我相信我搞砸了将参数绑定到准备好的语句。在我的情况下,这样做的正确方法是什么,因为我必须将多个值绑定到ruserid
和suserid
?
感谢任何人都可以提供帮助。
在我看来,* ruserid IN(?,?)AND suserid IN(?,?)*不是有效的CQL语法。 – xmas79
它工作正常,如果我不使用准备好的语句,也在命令行 –
我想我理解你的用例,你正试图从两个用户之间获得packageuuid。戒指?并使用当前的时间戳packageuuid生成? –