在我的news.php文件中,我有以下代码,如果用户发送此字段,请使用我的$search
变量读取我的函数Paginator。如果用户没有发布我的输入,我会打电话给我的Paginator
没有$search
变量。
if(isset($_POST['search']) && $_POST['search'] != 'Search:'){
$search = $_POST['search'];
Paginator('news', "WHERE title LIKE ? ORDER BY date DESC", $max, $link, $pag, $search);
}
else{
Paginator('news', "ORDER BY date DESC", $max, $link, $pag);
}
然后在我的函数Paginator中我想做一个不同的选择,这取决于我是否通过我的变量$ search(如果用户发布此变量)。
所以下面是我做分页符的函数:(但我只把函数的一部分放在这里对我的问题很重要)
function Paginator($table, $cond, $max, $link, $pag, $search = NULL){
$pdo = conect();
if($search){
$read = $pdo->prepare("SELECT * FROM {$table} {$cond}");
$read->bindValue(1,"%$search%",PDO::PARAM_STR);
$read->bindParam(2,$table,PDO::PARAM_STR);
$read->bindParam(3,$cond,PDO::PARAM_STR);
}
else{
$read = $pdo->prepare("SELECT * FROM {$table} {$cond}");
$read->bindParam(1,$table,PDO::PARAM_STR);
$read->bindParam(2,$cond,PDO::PARAM_STR);
}
$read->execute();
}
这是我的表格:
<form name="searchpost" action="" method="post">
<input type="text" name="search" onclick="if(this.value=='Search:')this.value=''" onblur="if(this.value=='')this.value='Search:'" value="Search:" />
<input type="submit" value="Search" name="sendForm" />
</form>
但我总是有这个错误:
警告:PDOStatement :: execute():SQLSTATE [HY093]:参数号无效:绑定变量的数量与我的函数Paginator中的令牌数量不匹配$ read-&gt; execute();
你能帮我找一些帮我找错的吗?
答案 0 :(得分:1)
您只能绑定PDO语句中的值,而不能绑定表名或列名或sql的完整部分。
除此之外,你甚至没有使用占位符作为你的表名和条件字符串(我认为$tabela
只是一个错字)。
所以你只在if
语句中绑定一个变量而在else
部分中没有绑定(你不需要它......):
$read = $pdo->prepare("SELECT * FROM {$table} {$cond}");
if($search){
$read->bindValue(1,"%$search%",PDO::PARAM_STR);
}
为了避免sql注入问题,你应该使用白名单来直接在sql中注入变量。