PHP postgres准备语句不识别参数

时间:2015-08-05 05:31:22

标签: php postgresql prepared-statement

我无法独自解决问题,希望有人能帮助我。

我的PHP代码准备一个语句,如果通过POST方法解析搜索字符串,但postgres似乎没有识别它。

我收到以下错误:

  

绑定消息提供1个参数,但是准备好的语句" filtered_list_query"需要0

这是我的代码:

 $query = 'SELECT * FROM public."my_predefined_view" hwm';
    if (isset($_POST["searchfilter"])) {
      $searchstring = htmlspecialchars($_POST["searchfilter"]);
      $query .= " WHERE hwm.hostname LIKE $1";
      $query .= ' ORDER BY hwm."IP", hwm.hostname;';

      pg_prepare('filtered_list_query', $query);
      $result = pg_execute('filtered_list_query', array($searchstring))
        or die('Query failed: ' . pg_last_error()); 
    }

我真的不得不忽略一些重大错误,因为这基本上是来自php pg_prepare示例页面的代码

编辑:

再次感谢您的帮助!

正如我现在所知,如果我像这样检查pg_prepare就不会发生这种情况:(当然使用错误的变量$query

pg_prepare('filtered_list_query', $query)
  or die ('Preparation failed: ' . pg_last_error());

1 个答案:

答案 0 :(得分:0)

错误本身意味着编译器检测到您要将变量绑定到查询,但它无法找到应该绑定它的位置。所以基本上它没有看到1美元的地方。

单引号在SQL中用于字符串文字。这意味着这个' $ 1'只是一个包含字符$和1而不是占位符的字符串。

这意味着您的代码应该是这样的:

 $query = "SELECT * FROM public.my_predefined_view hwm";
    if (isset($_POST["searchfilter"])) {
      $searchstring = htmlspecialchars($_POST["searchfilter"]);
      $query .= " WHERE hwm.hostname LIKE '$1'";
      $query .= ' ORDER BY hwm.IP, hwm.hostname;';

      pg_prepare('filtered_list_query', $query);
      $result = pg_execute('filtered_list_query', array($searchstring))
        or die('Query failed: ' . pg_last_error()); 
    }