2014-04-04 104 views
-1

我有一個無效的參數錯誤,但我想我有正確的編號參數。無效的參數編號錯誤

有沒有人在這裏看到相反的?

林收到這個錯誤:

PDOStatement對象::執行():SQLSTATE [HY093]:無效參數號:綁定變量的數目不$ readNews-匹配的令牌數>執行();

if(isset($_POST['search'])) 
    { 
    $search = $_POST['search']; 
    $readNews = $pdo->prepare("SELECT * FROM news WHERE title LIKE ? ORDER BY date DESC LIMIT ?, ?"); 
    $readNews->bindValue(1, $search); 
    $readNews->bindValue(1, $begin,PDO::PARAM_INT); 
    $readNews->bindValue(2, $max,PDO::PARAM_INT); 
    } 
    else 
    { 
    $readNews = $pdo->prepare("SELECT * FROM news ORDER BY date DESC LIMIT ?, ?"); 
    $readNews->bindValue(1, $begin,PDO::PARAM_INT); 
    $readNews->bindValue(2, $max,PDO::PARAM_INT); 
    } 

    $readNews->execute(); 
+1

不要使用'和'用逗號'SELECT * FROM新聞,標題LIKE' –

+0

但標題不是表,標題是一個專欄中,我想選擇*來自新聞的標題,如$搜索! – John23

+0

您可能打算使用'WHERE'作爲Phil在下面發佈。我早些時候看到了[你的其他問題](http://stackoverflow.com/q/22851219/),這讓我很難理解它。我知道我是對的。 –

回答

2

您有三個參數,但您可以爲索引1指定一個值兩次。試試這個...

$readNews->bindValue(1, $search); 
$readNews->bindValue(2, $begin,PDO::PARAM_INT); 
$readNews->bindValue(3, $max,PDO::PARAM_INT); 

我猜你可能要環繞$search值一些通配符了。試試這個...

$readNews->bindValue(1, "%$search%"); 

...或者在查詢中使用CONCAT ...

WHERE title LIKE CONCAT('%', ?, '%') 

您的查詢也應該使用WHERE代替AND ...

SELECT * FROM news WHERE title LIKE ? ORDER BY date DESC LIMIT ?, ?" 

我可能會簡化這個通過使用命名佔位符刪除一些重複。總的來說,這個...

if (isset($_POST['search'])) { 
    $stmt = $pdo->prepare("SELECT * FROM news WHERE title LIKE CONCAT('%', :search, '%') ORDER BY date DESC LIMIT :begin, :max"); 
    $stmt->bindParam(':search', $_POST['search']); 
} else { 
    $stmt = $pdo->prepare('SELECT * FROM news ORDER BY date DESC LIMIT :begin, :max'); 
} 
$stmt->bindParam(':begin', $begin, PDO::PARAM_INT); 
$stmt->bindParam(':max', $max, PDO::PARAM_INT); 
$stmt->execute(); 
+0

謝謝你工作:) – John23

+0

順便說一句,你認爲這種方法是一個很好的解決方案?因爲它似乎有點業餘,因爲代碼重複。這裏有一個小時的問題,現在我想這個解決方案,它的工作原理,但我再次,我不知道這是否是一個正確的方法.. – John23

+0

@ John23我最近的更新已經刪除了重複 – Phil