预编译SQL需要依照不同数据库的方言来编写SQL:
Postgres用$数字作为占位符:update 商品 set 价格 = $2 where id = $1。
MySQL用?作为占位符:update 商品 set 价格 = ? where id = ?。
SQL Server用@变量作为占位符:update 商品 set 价格 = @价格 where id = @id。
Oracle用:变量作为占位符:update 商品 set 价格 = :价格 where id = :id。
Postgres和MySQL用limit:select * from 商品 order by id limit 50 offset 25。
SQL Server和Oracle用fetch next:select * from 商品 order by id offset 25 rows fetch next 50 rows only。
从上面的占位方言可以知道:
Postgres和MySQL需要数组类型的占位值与对应下标的占位符相匹配,Postgres的参数数组的下标+1对应占位符的数字,MySQL的参数数组的下标对应占位符所在语句中的顺序,如:$sql.SQL名({ v: [1747294460000000, 99] }):把指定id的商品价格改为99元;
SQL Server和Oracle需要对象类型的占位值与对应键的占位符相匹配,如:$sql.SQL名({ v: { id: 1747294460000000, 价格: 99 } })。