Кассандра и ЗОП
Я установил драйвер 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, чтобы проверить это.