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());
}
我自己无法解决问题,希望有人能帮助我。
如果通过 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());
}