本手册下载

3.4参数绑定

与其在表达式字符串中直接使用值,不如将值从表达式字符串中分离出来。可以使用表达式字符串中的参数和bind ()函数将值绑定到参数。

参数有以下两种指定方式:anonymous和named。

参数类型

语法

例子

允许在CRUD操作中使用

允许在SQL字符串中使用

匿名

?

“年龄> ?”

没有

是的

命名

: <名称>

“时代>:时代”

是的

没有

的示例说明如何使用bind ()函数在一个execute ()函数。对于每个命名参数,提供一个实参bind ()包含参数名称及其值的。参数值对被传递的顺序bind ()都不重要。该示例假设测验Schema已分配给变量db那就是收藏my_collection的存在。

MySQL Shell和Node.js JavaScript代码

// Collection.find()固定值的函数var myColl = db.getCollection('my_collection');var myRes1 = myColl. var找到(= 18岁). execute ();//使用.bind()函数绑定参数var myRes2 = myColl。find('name =:param1 AND age =:param2').bind('param1','Rohit')。绑定(param2, 18) . execute ();//使用命名参数myColl。修改(' name =: param”)。设置(“年龄”,55)。bind(“参数”,“以”). execute ();//绑定适用于所有CRUD语句,除了add() var myRes3 = myColl。找到(“名字:param”)。bind(“参数”,' R % ') . execute ();

当使用Connector/Node.js运行此功能时,请注意execute ()返回一个承诺。您可能需要检查结果,以避免丢失错误。

MySQL Shell Python代码

# Collection.find()硬编码值myColl = db.get_collection('my_collection') myRes1 = myColl。find('age = 18').execute() #使用.bind()函数绑定参数myRes2 = myColl。find('name =:param1 AND age =:param2').bind('param1','Rohit')。bind('param2', 18).execute() #使用命名参数myColl。修改(' name =: param”)。设置(“年龄”,55)。bind('param', 'Nadya').execute() #绑定适用于所有CRUD语句,除了add() myRes3 = myColl。找到(“名字:param”)。bind(“参数”,' R % ') . execute ()

c#代码

// Collection.Find()固定值的函数var myColl = db.GetCollection("my_collection");var myRes1 = myColl. var找到(18岁“=”). execute ();//使用. bind()函数绑定参数var myRes2 = myColl。查找("name =:param1 AND age =:param2")。绑定(“param1”、“罗希特”)。绑定(“param2”,18). execute ();//使用命名参数myColl。修改(“name =: param”)。设置(“年龄”,55).Bind(“参数”,“以”). execute ();//绑定适用于所有CRUD语句,除了Add() var myRes3 = myColl。找到(“名字:param”).Bind(“参数”、“R %”). execute ();

Python代码

# Collection.find()函数的硬编码值my_coll = my_schema.get_collection('my_collection') my_res_1 = my_coll。find('age = 18').execute() #使用.bind()函数绑定参数my_res_2 = my_coll。find('name =:param1 AND age =:param2')。绑定(“param1”、“罗希特”)。bind('param2', 18).execute() #使用命名参数my_coll。修改(' name =: param”)。设置(“年龄”,55)。bind('param', 'Nadya').execute() #绑定适用于所有CRUD语句,除了add() my_res_3 = my_coll。找到(“名字:param”)。bind(“参数”,' R % ') . execute ()

Java代码

// Collection.find()固定值的函数DocResult myRes1 = myColl。找到(18岁“=”). execute ();//使用.bind()函数绑定参数DocResult myRes2 = myColl. DocResultfind("name =:param1 AND age =:param2")。绑定(“param1”、“罗希特”)。绑定(“param2”,18). execute ();//使用命名参数myColl。修改(“name =: param”)。设置(“年龄”,55).bind(“参数”,“以”). execute ();//使用命名参数Map params = new HashMap<>();参数个数。把(“名字”,“以”); myColl.modify("name = :name").set(".age", 55).bind(params).execute(); // Binding works for all CRUD statements except add() DocResult myRes3 = myColl.find("name like :param") .bind("param", "R%").execute(); }

c++代码

/// Collection.find()固定值的函数auto myRes1 = myColl。找到(18岁“=”). execute ();//使用.bind()函数绑定参数auto myRes2 = myColl。find("name =:param1 AND age =:param2") .bind("param1","Rohit")。绑定(“param2”,18). execute ();//使用命名参数myColl。修改(“name =: param”)。设置(“年龄”,55).bind(“参数”,“以”). execute ();//绑定适用于所有CRUD语句,除了add() auto myRes3 = myColl。找到(“名字:param”).bind(“参数”、“R %”). execute ();

X DevAPI不支持匿名占位符。这种限制通过使用占位符的多种方法提高了CRUD命令链中的代码清晰度。不管bind ()根据参数名称,在参数和占位符之间总是有明确的关联。

CRUD命令链的所有方法都为占位符形成一个命名空间。在下面的例子中,修改()而且设置()(或find ()而且字段()是链接。这两个方法都接受带有占位符的表达式。占位符指一个组合的名称空间。两者都使用一个占位符: param.一个电话bind ()使用一个名称值参数: param用于将占位符值分配给: param在链式方法中

MySQL Shell JavaScript代码

//每个参数一个bind() var myColl = db.getCollection('亲戚');var juniors = myColl. var找到('别名=“jr”). execute () .fetchAll ();for (var index in junior){myColl。修改(' name =: param”)。集(parent_name, mysqlx.expr(“:param”))。bind(“参数”,初中(指数). name) . execute ();}

MySQL Shell Python代码

myColl = db.get_collection('relatives') juniors = myColl。find('alias = "jr"').execute().fetch_all() for junior in junior: myColl。修改(' name =: param”)。\集(parent_name, mysqlx.expr(“:param”))。\绑定(“参数”,junior.name) . execute ()

node . js JavaScript代码

//每个参数一个bind() db .getCollection('亲戚');.find('alias = "jr"') .execute(function (junior){返回myColl .modify('name =:param') .set('parent_name', mysqlx.expr(':param')) .bind('param', junior.name) .execute();});

c#代码

//每个参数myColl一个bind()找到(“a =: param”)。bind (new {param = "c"}).Execute();

Python代码

my_coll = my_schema.get_collection('relatives') juniors = my_coll. get_collection('亲戚')Find ('alias = "jr"').execute().fetch_all() for junior in junior: my_coll。修改('name =:param') \ .set('parent_name', mysqlx.expr(':param')) \ .bind('param', junior.name).execute()

Java代码

myColl = db.getCollection(" associations ");DocResult juniors = myColl。找到(“别名=‘小’。”). execute ();而(juniors.hasNext ()) {myColl。modify("name =:param") .set("parent_name", Expression.expr(":param")) .bind("param", junior .next().get("name")) .execute();}

c++代码

myColl = db.getCollection(" associations ");DocResult juniors = myColl。找到(“别名=‘小’”). execute ();DbDoc初级;while ((junior = junior . fetchone ())) {myColl. fetchone。修改(“name =: param”)这里(“parent_name expr(“:param”)).bind(“参数”,初级(“名字”)). execute ();}

命名参数不允许使用以数字开头的名称。例如,: 1个而且:1是不允许的。

准备CRUD语句

而不是直接绑定和执行CRUD操作bind ()而且execute ()execute ()也可以将CRUD操作对象存储在变量中,以备以后执行。

这样做的好处是能够将几组变量绑定到表达式字符串中定义的参数,从而在执行大量类似操作时获得更好的性能。该示例假设测验Schema已分配给变量db那就是收藏my_collection的存在。

MySQL Shell JavaScript代码

var myColl = db.getCollection('my_collection');//只准备一个Collection.remove()操作,但不要运行它var myRemove = myColl。remove('name =:param1 AND age =:param2');//将参数绑定到准备好的函数和.execute() myRemove。绑定(“param1”,“莱昂”)。bind (param2, 39) . execute ();myRemove。绑定(“param1”、“约翰”)。绑定(param2, 28) . execute ();//绑定适用于所有CRUD语句,但add() var myFind = myColl。find('name like:param1 AND age >:param2');var myDocs = myFind。绑定(' param1 ', ' L % ')。bind('param2', 20).execute(); var MyOtherDocs = myFind.bind('param1', 'J%').bind('param2', 25).execute();

MySQL Shell Python代码

myColl = db.get_collection('my_collection')remove('name =:param1 AND age =:param2') #将参数绑定到准备好的函数和.execute() myRemove. remove('name =:param1 AND age =:param2')绑定(“param1”,“莱昂”)。bind (param2, 39) . execute () myRemove。绑定(“param1”、“约翰”)。bind('param2', 28).execute() #绑定适用于所有CRUD语句,但add() myFind = myColl。find('name like:param1 AND age >:param2') myDocs = myFind。绑定(' param1 ', ' L % ')。bind('param2', 20).execute() MyOtherDocs = myFind。绑定(' param1 ', ' J % ')。绑定(param2, 25) . execute ()

node . js JavaScript代码

var myColl = db.getCollection('my_collection');//只准备一个Collection.remove()操作,但不要运行它var myRemove = myColl。remove('name =:param1 AND age =:param2');//将参数绑定到准备好的函数和.execute() myRemove。绑定(“param1”,“莱昂”)。bind (param2, 39) . execute ();myRemove。绑定(“param1”、“约翰”)。绑定(param2, 28) . execute ();//绑定适用于所有CRUD语句,但add() var myFind = myColl。find('name like:param1 AND age >:param2');var myDocs = myFind。绑定(' param1 ', ' L % ')。bind('param2', 20).execute(); var MyOtherDocs = myFind.bind('param1', 'J%').bind('param2', 25).execute();

c#代码

var myColl = db.GetCollection("my_collection");//只准备一个Collection.Remove()操作,但不要运行它var myRemove = myColl。删除("name =:param1 AND age =:param2");//将参数绑定到准备好的函数和. execute () myRemove。绑定(“param1”,“莱昂”)。Bind(“param2 39) . execute ();myRemove。绑定(“param1”、“约翰”)。绑定(“param2 28) . execute ();//绑定适用于所有CRUD语句,但Add() var myFind = myColl。Find("name like:param1 AND age:param2");var myDocs = myFind。绑定(“param1”、“L %”)。Bind("param2", 20).Execute(); var MyOtherDocs = myFind.Bind("param1", "J%").Bind("param2", 25).Execute();

Python代码

my_coll = my_schema.get_collection('my_collection') #只准备一个Collection.remove()操作,但不要运行它。remove('name =:param1 AND age =:param2') #将参数绑定到准备好的函数和.execute() my_remove。绑定(“param1”,“莱昂”)。bind (param2, 39) . execute () my_remove。绑定(“param1”、“约翰”)。bind('param2', 28).execute() #绑定适用于所有CRUD语句,但add() my_find = my_coll。find('name like:param1 AND age >:param2') my_docs = my_find。绑定(' param1 ', ' L % ')。Bind ('param2', 20).execute() my_other_docs = my_find. Bind ('param2', 20).execute()绑定(' param1 ', ' J % ')。绑定(param2, 25) . execute ()

Java代码

myColl = db.getCollection("my_collection");//创建Collection.remove()操作,但还没有运行它remove("name =:param1 AND age =:param2");//将参数绑定到准备好的函数和.execute() myRemove。绑定(“param1”,“莱昂”)。bind(“param2 39) . execute ();myRemove。绑定(“param1”、“约翰”)。绑定(“param2 28) . execute ();//绑定适用于所有CRUD语句,但add() FindStatement myFind = myColl。find("name LIKE:name AND age >:age");Map params = new HashMap<>();参数个数。put("name", "L%"); params.put("age", 20); DocResult myDocs = myFind.bind(params).execute(); params.put("name", "J%"); params.put("age", 25); DocResult myOtherDocs = myFind.bind(params).execute();

c++代码

myColl = db.getCollection("my_collection");//创建Collection.remove()操作,但不运行它自动myRemove = myColl。remove("name =:param1 AND age =:param2");//将参数绑定到准备好的函数和.execute() myRemove。绑定(“param1”,“莱昂”)。bind(“param2 39) . execute ();myRemove。绑定(“param1”、“约翰”)。绑定(“param2 28) . execute ();//绑定适用于所有CRUD语句,但Add() auto myFind = myColl。find("name like:param1 AND age:param2");自动myDocs = myFind。绑定(“param1”、“L %”)。绑定(“param2”,20). execute (); auto MyOtherDocs = myFind.bind("param1", "J%").bind("param2", 25).execute();