3

我已经为 PHP安装了YACassandraPDO驱动程序。我有一个模式,其中一个表有一个average DOUBLE字段,并且正在使用 CQL3/Casssandra 2.0。

并尝试了以下操作:

$stmt = $this->connection->prepare('INSERT INTO a (average) VALUES (:average)');
$stmt->bindValue(':average', 2.2);
$stmt->execute();

这导致一个CQLSTATE[HY000] [2] Invalid STRING constant (2.2) for average of type double.

我应该如何让这个工作?

看到 PDO 没有任何方式指定浮点/双精度(docs)的类型,它开始看起来像 PDO 是不行的,除非我希望我的字段类型都是 TEXT 类型,这反过来又具有其他不良影响.

4

1 回答 1

2

正如您已经发现的那样,它似乎默认需要一个字符串。根据 github 上的文档,诚然有点违反直觉,您也需要将 PARAM_INT 用于双精度。所以试试这个:

$stmt->bindValue(':average', 2.2, PDO::PARAM_INT);
or maybe even
$stmt->bindValue(':average', "2.2", PDO::PARAM_INT);

类型定义如下:

text        PDO::PARAM_STR 
blob        PDO::PARAM_STR 
varchar     PDO::PARAM_STR 
uuid        PDO::PARAM_INT
int         PDO::PARAM_INT
bigint      PDO::PARAM_INT
float       PDO::PARAM_INT
double      PDO::PARAM_INT
decimal     PDO::PARAM_INT

有关更多信息,请参阅 github 上驱动程序文档中的相关“绑定”部分

希望这确实有效。我没有一个正在运行的 php 测试环境来测试它。

于 2013-09-10T14:31:25.287 回答