当前位置: 首页 > 知识库问答 >
问题:

CQL PHP驱动程序:具有良好值的预准备语句上的无效值类型

左丘照
2023-03-14

我是卡珊德拉的新成员。我正在使用Datastax的Cassandra PHP驱动程序。我试图创建具有多个插入的批处理语句。给定表格模型:

CREATE TABLE real_time_log (
  du_id int,
  tag_id int,
  status int,
  time_stamp bigint,
  value float,
  PRIMARY KEY ((du_id, tag_id), status, time_stamp)
) 

我尝试通过两种方式插入以下值:

$batch = new Cassandra\BatchStatement();
$stmt = $this->cassandraDb->prepare('insert into real_time_log'
         . ' (du_id, tag_id, status, time_stamp, value) '
         . 'VALUES (?, ?, ?, ?, ?)');
foreach ($curData as $cData) {
    $values = explode(',', $cData);
    $stmtValues = array(
        'du_id' => 11111,
        'tag_id' => 22222,
        'status' => (int) $values[2],
        'time_stamp' => new Cassandra\Bigint($values[0]),
        'value' => (double) $values[1]
    );
    $batch->add($stmt, $stmtValues);
}
$this->cassandraDb->executeAsync($batch);

这会产生错误:

PHP Fatal error:  Uncaught exception 'Cassandra\Exception\InvalidArgumentException' with message 'Invalid value type'

与此同时,我尝试了一种更直接的方法,没有准备好声明:

$batch = new Cassandra\BatchStatement();
foreach ($curData as $cData) {
    $values = explode(',', $cData);
    $stmtValues = array(
        11111,
        22222,
        (int) $values[2],
        new Cassandra\Bigint($values[0]),
        (double) $values[1]
     );
     $batch->add(new Cassandra\SimpleStatement('insert into real_time_log'
                        . ' (du_id, tag_id, status, time_stamp, value) '
                        . 'VALUES (' . implode(',', $stmtValues) . ')'));
 }
 $this->cassandraDb->executeAsync($batch);

这样一切都正常,但肯定会慢很多。也许有人能解释一下我正在做的准备好的陈述方法有什么问题?

提前谢谢你。

共有2个答案

冀望
2023-03-14

我已经执行了这个操作来插入一行,它运行得很好:

$glid = 12345;
$modid = 'mobile';
$sysdate = date("YmdHis");

$sql = "insert into user (USR_ID,modid,membersince) values (?,?,?)";
$par = array(new Cassandra\Bigint($glid),$modid,new Cassandra\Bigint($sysdate));

$statement = $db->prepare($sql);
$db->execute($statement, array(
                 'arguments' => $par
));
沙星波
2023-03-14

乍一看,它应该可以工作——您是否尝试过显式地向它传递一个< code>float(将< code>(double) $values[1]更改为< code > new Cassandra \ Float($ values[1]))?

 类似资料:
  • 我正在尝试使用timeuuid值执行准备好的语句,并获得“无效值类型”异常。 下面是代码: 我得到以下异常: "Cassandra\Exception\InvalidArgumentException:无效的值类型" 以下是表格方案: 我做错了什么? 我正在使用PECL卡桑德拉1.1.0和卡桑德拉2.0.15: 已安装与cassandra相关的软件包:cassandra20-2.0.15-1.no

  • 问题内容: 引用MySQL INSERT手册-UPDATE也一样: 使用关键字DEFAULT可以将列明确设置为其默认值。这使编写INSERT语句(为少数几个列分配值)更加容易,因为它使您避免编写不完整的VALUES列表,该列表不包含表中每个列的值。否则,您将不得不写出与VALUES列表中的每个值相对应的列名列表。 简而言之,如果我写 插入新的一列,并将column2设置为其默认值(无论它是多少)。

  • 用于cassandra的Datastax Java驱动程序(cassandra-driver-core 2.0.2)支持PreparedStatements以及QueryBuilder API。使用其中一种比另一种有什么特别的优势吗?缺点? 文档:http://www.datastax.com/documentation/developer/java-driver/2.0/common/drive

  • 问题内容: 在mysqli准备好的语句中,NULL变成’‘(对于字符串)或0(对于整数)。我想将其存储为真正的NULL。有什么办法吗? 问题答案: 我知道这是一个旧线程,但是可以将真实的NULL值绑定到准备好的语句(请阅读this)。 实际上,您可以使用mysqli_bind_parameter将NULL值传递给数据库。只需创建一个变量并将NULL值(请参见手册页)存储到该变量并将其绑定即可。无论

  • 我在使用DataStax php驱动程序1.0.0-rc和Cassandra 2.2.3的Prepared Statements时遇到了一个奇怪的错误。我在这一行遇到了一条异常: 我看到了这个错误: 下面是用于与Cassandra通信的类存根: 如果我将Simple Statemetn与标准select查询一起使用,它会起作用。 有什么建议吗?

  • 我准备了以下语句,通过JDBC驱动程序将其发送到Oracle数据库: 但是,我希望使用相同的准备好的语句,通过提供通配符参数这样的东西来获取表中的所有行。我尝试了“*”和“”这样的字符串,但它总是不返回行。 是否存在用于获取所有行的此准备语句中的参数的值?