Кассандра и ЗОП

Я установил драйвер YACassandraPDO для PHP. У меня есть схема, где одна таблица имеет 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 не имеет никакого способа указать типы float / double ( docs), он начинает выглядеть так, как будто PDO не используется, если я не хочу, чтобы все мои типы полей имели тип TEXT, что, в свою очередь, имеет другие нежелательные последствия,

1 ответ

Решение

Похоже, что она ожидает строку по умолчанию, как вы уже узнали. Согласно документации на github, и, по общему признанию, немного нелогично, вам также нужно использовать PARAM_INT для double. Так что попробуйте это вместо:

$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, чтобы проверить это.

Другие вопросы по тегам