我无法独自解决问题,希望有人能帮助我。
我的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());
答案 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());
}