了解PHP中的Postgres Like命令中的参数

时间:2009-08-25 04:32:23

标签: php postgresql

如何在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       调用堆栈

2 个答案:

答案 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'] . '%')                                                                                                                                                       
);