【问题标题】:PHP postgres prepared statement doesn't recognize parametersPHP postgres 准备好的语句不识别参数
【发布时间】:2015-08-05 05:31:21
【问题描述】:

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

如果搜索字符串通过 POST 方法解析到它,我的 PHP 代码会准备一个语句,但 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());

【问题讨论】:

  • 问题是否与您拼错 $query var 而是将 $querie(未定义?)var 发送到准备函数这一事实有关?
  • 天啊...谢谢你!!! (有人可以因为尴尬而删除我的问题吗?)

标签: php postgresql prepared-statement


【解决方案1】:

错误本身意味着编译器检测到您要将变量绑定到查询,但它无法找到应该绑定它的位置。所以基本上它没有看到 $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()); 
    }

【讨论】:

  • 好主意,但似乎行不通。我犯了同样的错误。我现在只用单引号中的 '$1' 和单引号中的整个 WHERE 子句进行了尝试。没有任何效果。有什么想法吗?
  • 尝试检查其他引号。您需要视图和 IP 周围的引号吗?
  • 必要时在“IP”周围加上双引号,因为否则我得到了该列不存在的错误。 (区分大小写)。
  • 再次感谢您的帮助,但正如您所见,我遇到了带有两个变量名的复制粘贴错误...
猜你喜欢
  • 2021-02-04
  • 1970-01-01
  • 2020-08-20
  • 1970-01-01
  • 2015-06-27
  • 1970-01-01
  • 1970-01-01
  • 2010-11-30
  • 2021-01-28
相关资源
最近更新 更多