gpt4 book ai didi

postgresql - 与 postgres crate 的查询函数一起使用时,ilike 表达式中的 "$1"参数是否需要转义?

转载 作者:行者123 更新时间:2023-12-03 11:38:06 25 4
gpt4 key购买 nike

我正在使用 postgres crate,它使用 postgres::Connection 进行查询。我根据 ilike '%search_string%' 表达式中的字符串值查询表:

extern crate postgres;
use std::error::Error;

//DB Create queries
/*
CREATE TABLE TestTable (
Id SERIAL primary key,
_Text varchar(50000) NOT NULL
);

insert into TestTable (_Text) values ('test1');
insert into TestTable (_Text) values ('test1');
*/

fn main() -> Result<(), Box<dyn Error>> {
let conn = postgres::Connection::connect(
"postgres://postgres:postgres@localhost:5432/notes_server",
postgres::TlsMode::None,
)?;

let text = "test";

// //Does not work
// let query = &conn.query(
// "
// select * from TestTable where _text ilike '%$1%'
// ",
// &[&text],
// )?;

//Works fine
let query = &conn.query(
"
select * from TestTable where Id = $1
",
&[&1],
)?;

println!("Rows returned: {}", query.iter().count());

Ok(())
}

如果我取消注释代码的 //Does not work part,我将收到以下错误:

thread 'main' panicked at 'expected 0 parameters but got 1'

它似乎无法识别 ilike 表达式中包含的 $1 参数。我试过转义单引号,但这并没有改变它。

唯一的依赖是:

postgres = { version = "0.15.2", features = ["with-chrono"] } 

最佳答案

令我惊讶的是,修复方法如下:

let text = "%test%";

let query = &conn.query(
"
select * from TestTable where _text like $1
",&[&text],
)?;

显然 postgres 函数知道在这种情况下在字符串周围添加单引号。

我是从这里了解到的:https://www.reddit.com/r/rust/comments/8ltad7/horrible_quote_escaping_conundrum_any_ideas_on/

关于postgresql - 与 postgres crate 的查询函数一起使用时,ilike 表达式中的 "$1"参数是否需要转义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66126558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com