2014-06-10 55 views
1

在我的news.php文件中,我使用下面的代碼來讀取我的函數Paginator與我的$search變量,如果用戶發送此字段。如果用戶沒有發佈我的輸入,我打電話給我的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); 
} 

然後在我的功能分頁程序我想做一個不同的選擇,這取決於如果我通過我的變量$搜索(如果用戶張貼此變量)或沒有。

那麼下面這是我的功能做一個分頁程序:(但我只把這裏的功能是很重要的一部分,我的問題)

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]:無效的參數編號:綁定變量的數量不匹配托克數ns在我的函數Paginator in $ read-> execute();

你可以給我一些幫助,試圖找到我做錯了什麼?

+1

'$ table'和'$ cond'不應該綁定到查詢。 –

+0

那麼當你的查詢只有一個時,你爲什麼要綁定3個變量?表名不能綁定 –

回答

1

只能綁定PDO語句中的值,而不能綁定表或列名稱或sql的完整節。

除此之外,你甚至沒有使用你的表名和條件字符串的佔位符(我認爲$tabela只是一個錯字)。

所以你只能在if聲明一個變量並沒有綁定在else節(你不需要反正...):

$read = $pdo->prepare("SELECT * FROM {$table} {$cond}"); 
if($search){ 
    $read->bindValue(1,"%$search%",PDO::PARAM_STR); 
} 

爲了避免SQL注入問題,你應該使用白色 - 你直接在sql中注入的變量列表。

+0

謝謝你的回答jeroen。但是,如果我不提交表格,我的分頁效果很好,所以看起來這些作品將我的表格和我的狀況與pdo綁定在一起!我想我需要我的其他人,因爲如果我不提交我的表單,我想選擇沒有我喜歡的聲明! – OzzC

+0

而且我的查詢也可以,如果提交表單和我print_r my $讀取我得到PDOStatement對象([queryString] =>選擇*從新聞標題樣?ORDER BY日期DESC),如果我不提交我得到PDOStatement對象[queryString] => SELECT * FROM news ORDER BY date DESC)。 – OzzC

+1

嗯,但我試過你的代碼,它的工作原理!現在我沒有我的錯誤!但奇怪的是,因爲在我做這個搜索表單之前,我已經使用Paginator函數在我的news.php中分頁,並且我綁定了我的表格,所以我不明白爲什麼現在不工作!然而,我的分頁不能正常工作,但是您的解決方案有效,謝謝! – OzzC

相關問題