次のようなクエリがあります。
INSERT IGNORE INTO my_table SET `data` = '{\"m\":50}'
私の実際のクエリではJSONデータがはるかに大きいと仮定すると、常にエラーが発生します。
Zend_Db_Statement_Exception: Invalid bind-variable name ':50'
これは私がするときです$connection->query( $sql );
過去に、値を二重引用符ではなく単一引用符で囲んでこれを解決しましたが、何らかの理由で現在は機能していません。私は何が欠けていますか?
編集
受け入れられた回答に加えて、関数に渡すことができることを確認するために使用したコードを次にnew Zend_Db_Expr("NOW()")
示しますが、JSON データのようなものは適切に準備されています。
foreach ( $params as $key => $value ) {
// Can't use ? for anything that requires an expression, such as NOW()
if ( $value instanceof Zend_Db_Expr ) {
$db_keys[] = $connection->quoteInto( "`{$key}` = ?", $value );
}
else {
$db_values[] = $value;
$db_keys[] = "`{$key}` = ?";
}
} // foreach params
$sql = "INSERT IGNORE INTO {$table} SET " . implode( ', ', $db_keys );
$result = $connection->query( $sql, $db_values );