如何在Postgres Like
命令中使用参数?
我正在阅读this document。
我正在尝试搜索表lorem
及其questions
列中的单词body
。
我在PHP
中运行以下代码失败$result = pg_query_params ( $dbconn,
"SELECT question_id, body
FROM questions
WHERE body ilike '%$1%'",
array ( $_GET['search'])
);
我收到此警告
警告:pg_query_params()[function.pg-query-params]:查询 失败:错误:绑定消息供应1 参数,但准备好的声明“” 需要0英寸 /var/www/codes/search_body.php在线 10 调用堆栈
答案 0 :(得分:8)
您必须使用参数代替一个整个值,而不是在引号内。
解决方案1:将LIKE
通配符连接到参数值:
$result = pg_query_params ( $dbconn,
"SELECT question_id, body
FROM questions
WHERE body ilike $1",
array ( "%" . $_GET['search'] . "%")
);
解决方案2:在SQL表达式中连接LIKE
通配符:
$result = pg_query_params ( $dbconn,
"SELECT question_id, body
FROM questions
WHERE body ilike '%' || $1 || '%'",
array ( $_GET['search'] )
);
答案 1 :(得分:2)
我认为因为$ 1是单引号,所以它被视为字面值,而不是占位符。
尝试:
$result = pg_query_params ( $dbconn,
"SELECT question_id, body
FROM questions
WHERE body ilike $1",
array ('%' . $_GET['search'] . '%')
);