Spec-Zone.ru › MySQL Connectors 1.0

3.3 Привязка параметров

Вместо использования значений непосредственно в строке выражения рекомендуется разделять значения и саму строку выражения. Это делается с помощью параметров в строке выражения и функции bind() для привязки значений к параметрам.

Параметры могут быть заданы следующим образом: анонимные и именованные.

Тип параметра

Синтаксис

Пример

Разрешено в операциях CRUD

Разрешено в строках SQL

Анонимный

?

'age > ?'

нет

да

Именованный

:<имя>

'age > :age'

да

нет

Следующий пример демонстрирует, как использовать функцию bind() перед функцией execute(). Для каждого именованного параметра предоставьте аргумент для bind(), содержащий имя параметра и его значение. Порядок, в котором пары значение-параметр передаются в bind(), не имеет значения. В примере предполагается, что схема test была назначена переменной db, а коллекция my_collection существует.

// Collection.find() function with fixed values
var myColl = db.getCollection('my_collection');

var myRes1 = myColl.find('age = 18').execute();

// Using the .bind() function to bind parameters
var myRes2 = myColl.find('name = :param1 AND age = :param2').bind('param1','Rohit').bind('param2', 18).execute();

// Using named parameters
myColl.modify('name = :param').set('age', 55).
        bind('param', 'Nadya').execute();

// Binding works for all CRUD statements except add()
var myRes3 = myColl.find('name like :param').
        bind('param', 'R%').execute();

Анонимные заглушки не поддерживаются в X DevAPI. Это ограничение улучшает ясность кода в цепочках команд CRUD с несколькими методами, использующими заглушки. Независимо от используемого варианта синтаксиса bind() всегда существует четкое соответствие между параметрами и заглушками на основе имени параметра.

Все методы цепочки команд CRUD образуют один пространство имен для заглушек. В следующем примере modify() и set() объединены. Оба метода принимают выражение с заглушками. Заглушки относятся к одному объединённому пространству имен. Оба используют одну заглушку под названием :param. Один вызов bind() с одним параметром имени и значения для :param используется для назначения значения заглушки обоим появлениям :param в объединенных методах ..

// one bind() per parameter
var myColl = db.getCollection('relatives');
var juniors = myColl.find('alias = "jr"').execute().fetchAll();

for (var index in juniors){
  myColl.modify('name = :param').
    set('parent_name',mysqlx.expr(':param')).
    bind('param', juniors[index].name).execute();
}

Не допускается использование именованного параметра, имя которого начинается с цифры. Например, :1one и :1 недопустимы.

Подготовка операторов CRUD

Вместо прямой привязки и выполнения операций CRUD с помощью bind() и execute() или execute() также можно сохранить объект операции CRUD в переменной для последующего выполнения.

Преимущество этого заключается в возможности привязки нескольких наборов переменных к параметрам, определённым в строках выражений, и, следовательно, в улучшении производительности при выполнении большого количества аналогичных операций. В примере предполагается, что схема test была назначена переменной db, а коллекция my_collection существует.

var myColl = db.getCollection('my_collection');

// Only prepare a Collection.remove() operation, but do not run it yet
var myRemove = myColl.remove('name = :param1 AND age = :param2');

// Binding parameters to the prepared function and .execute()
myRemove.bind('param1', 'Leon').bind('param2', 39).execute();
myRemove.bind('param1', 'Johannes').bind('param2', 28).execute();

// Binding works for all CRUD statements but add()
var myFind = myColl.find('name like :param1 AND age > :param2');

var myDocs = myFind.bind('param1', 'L%').bind('param2', 20).execute();
var MyOtherDocs = myFind.bind('param1', 'J%').bind('param2', 25).execute();

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/x-devapi-userguide-shell-js-en/parameter-binding.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API