3

PHP用のYACassandraPDOドライバーをインストールしました。1 つのテーブルに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 ) の型を指定する方法がないことを確認すると、フィールド型をすべて TEXT 型にする必要がない限り、PDO は使えないように見え始めています。 .

4

1 に答える 1

2

すでにわかっているように、デフォルトで文字列を期待しているようです。github のドキュメントによると、確かに少し直感に反するように、double にも 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 に答える