У меня проблема, когда некоторые переменные, вероятно (я не знаю точно), не вставлены в заключительный оператор. Вот мой пример:N1QL подготовленный оператор не работает 100%
Работы:
public static function findByPageAndFieldContains($recordsPerPage, $page, $field, $searchterm) {
$query = CouchbaseN1qlQuery::fromString('SELECT * FROM `public_portal` WHERE `collection`=$collection AND TOSTRING('.$field.') LIKE "%'.$searchterm.'%" ORDER BY `_id` limit $limit offset $offset');
$query->options['$collection'] = static::COLLECTION_NAME;
//$query->options['$field'] = $field;
$query->options['$limit'] = $recordsPerPage;
$query->options['$offset'] = $recordsPerPage*($page-1);
//$query->options['$searchterm'] = $searchterm;
$result = DB::getDB()->query($query);
var_dump($query);
var_dump($result);
$objects = array();
foreach($result as $row) {
$object = new static($row->{"public_portal"});
$object->setId($row->{"public_portal"}->{"_id"});
$objects[] = $object;
}
//var_dump($objects);
return $objects;
return $result;
}
Debug Output: debug01
Не работает: выход
public static function findByPageAndFieldContains($recordsPerPage, $page, $field, $searchterm) {
$query = CouchbaseN1qlQuery::fromString('SELECT * FROM `public_portal` WHERE `collection`=$collection AND TOSTRING($field) LIKE "%$searchterm%" ORDER BY `_id` limit $limit offset $offset');
$query->options['$collection'] = static::COLLECTION_NAME;
$query->options['$field'] = $field;
$query->options['$limit'] = $recordsPerPage;
$query->options['$offset'] = $recordsPerPage*($page-1);
$query->options['$searchterm'] = $searchterm;
$result = DB::getDB()->query($query);
var_dump($query);
var_dump($result);
$objects = array();
foreach($result as $row) {
$object = new static($row->{"public_portal"});
$object->setId($row->{"public_portal"}->{"_id"});
$objects[] = $object;
}
//var_dump($objects);
return $objects;
return $result;
}
Debug: debug02
В основном второй пример не возвращает результата, в то время как первый работает отлично.
Любая идея, почему?
ОК, $ searchterm работает сейчас. Благодарю. Но для поля $ удаляет ";" и с помощью addslashes() на нем достаточно или есть специальная функция для couchbase, например, для других СУБД? –
: $ field = addslashes (str_replace (";", "", $ field)); –
Я просто понял, что вы не можете избежать символов с '\', поэтому никаких 'addslashes()'. ATM Я использую '$ field = str_replace (["; "," '"," "," "," \ "]," ", $ field);' Это хорошее решение или вы знаете, лучшее решение? –