Cassandra \ Exception \ InvalidArgumentException: нет значения или столбца для имени
Я пытаюсь обновить старый код из YACassandraPDO до нового расширения PHP Datastax, и у меня возникают некоторые проблемы. Примечательно, что это ошибка. Я не могу понять, почему или что не так.
Номера параметров совпадают. Есть ли что-то кардинально другое, что Datastax делает для подготовленных заявлений?
$query = "UPDATE {$this->keyspace}.visit USING TTL {$this->ttl}
SET ip=:ip, browser=:browser, referrer=:ref, terms=:terms
, url=:url, stime=:stime, etime=:etime
, company=:company, isp=:isp, domain=:domain, client_type = :client_type
, city=:city, state=:state_cd, postal_cd=:postal, country=:country
, country_cd=:country_cd, latitude=:lat, longitude=:long, area_cd=:area_cd
, user_id=:user_id
WHERE visit_dt=:dt AND cid=:cid AND sid=:sid AND pvid=:pvid";
Массив:
$params = [
':dt' => new Timestamp(strtotime(date('Y-m-d')), 0),
':cid' => $data['customerId'],
':sid' => $data['sid'],
':pvid' => $data['pvid'],
// Columns
':ip' => $ip,
':browser' => utf8_encode($data['browser']),
':client_type' => utf8_encode($device),
':ref' => utf8_encode($data['referrer']),
':terms' => utf8_encode($terms),
':url' => utf8_encode($data['url']),
':stime' => $data['now'],
':etime' => $data['etime'],
':user_id' => $data['userid'],
// Geodecode information
':company' => utf8_encode($geo->isp),
':domain' => utf8_encode($geo->domainName),
':isp' => utf8_encode($geo->isp),
':city' => utf8_encode($geo->cityName),
':state_cd' => utf8_encode($geo->regionName),
':country' => utf8_encode($geo->countryName),
':country_cd' => utf8_encode($geo->countryCode),
':postal' => $geo->zipCode,
':lat' => floatval($geo->latitude),
':long' => floatval($geo->longitude),
':area_cd' => $areac
];
Исполнение:
$prep = $this->adapter()->prepare($stmnt);
$return = $this->adapter()->execute($prep, ['arguments' => $params]);
Хорошо, я обнаружил проблему: колены. «: ключ» должен быть просто «ключ».
Чувак, это заняло слишком много времени, чтобы увидеть. Все мои старые имена были $stmnt->bindValue(':company', [...]);
; так что это полностью ускользнуло от моего взгляда.
Других решений пока нет …