PHP postgres 预处理语句无法识别参数

PHP postgres prepared statement doesn't recognize parameters

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

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

我收到以下错误:

bind message supplies 1 parameters, but prepared statement "filtered_list_query" requires 0

这是我的代码:

 $query = 'SELECT * FROM public."my_predefined_view" hwm';
    if (isset($_POST["searchfilter"])) {
      $searchstring = htmlspecialchars($_POST["searchfilter"]);
      $query .= " WHERE hwm.hostname LIKE ";
      $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的地方。

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

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

 $query = "SELECT * FROM public.my_predefined_view hwm";
    if (isset($_POST["searchfilter"])) {
      $searchstring = htmlspecialchars($_POST["searchfilter"]);
      $query .= " WHERE hwm.hostname LIKE ''";
      $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()); 
    }