2016-02-12 27 views
0

我想創建一個網站的搜索功能,並創建了從PHPMYADMIN生成的SQL代碼,見下文;PHP的PDO和SQL搜索通配符綁定參數

$sql = "SELECT * FROM `bg85ow`.`sessions` WHERE CONVERT(`SessionName` USING utf8) LIKE '%:SessionName1%'"; 

這裏是處理查詢的PHP代碼;

//bind params 
       $SessionName1 = filter_input(INPUT_GET, 'search'); 
       $stmt -> bindValue(':SessionName1', $SessionName1, PDO::PARAM_STR); 

       //execute 
       $success = $stmt -> execute(); 

       if (!$success){ 
        print $stmt->errorInfo()[2]; //PDO driver error message 
       } 

       else{ 
       } 

       //array 
       $r = $stmt->fetchAll(PDO::FETCH_ASSOC); 
       $dbh = null; 

       if(!$r) 
       { 
        echo "No Results"; 
       }  

       foreach ((array) $r as $row) { 
       echo $row['SessionId']; 
       echo $row['SessionName']; 
       } 

出於某種原因,這將不會返回execute部分工作正常並且傳球成功測試的結果,但那麼一旦它到達陣列沒有返回任何結果。

我檢查了並且$SessionName1在搜索中有這個詞,所以它被傳遞給查詢。

當我改變%:SessionName1%football這是搜索詞我與測試,代碼返回的結果不錯,但一旦變回:SessionName1它不會返回結果,即使搜索詞是完全一樣的。

任何人都可以看到我做錯了什麼,我花了很多年看着這個,看不到錯誤。

我到處搜索了一個這個問題的答案,但是我找不到一個針對這個問題的具體問題,我也是一個初學PHP和SQL的人。

+2

可能是你在'$語句輸入錯誤 - > bindValue( ':SessionName1',$ SessionName1,PDO :: PARAM_STR);'...有你'綁定地方SessionName1'代替SESSIONNAME的' '在字符串中...即,這必須是這樣的:'$ stmt - > bindValue(':SessionName',$ SessionName1,PDO :: PARAM_STR);' – Wizard

+0

你必須使用正確的sessionName。 – Monty

+0

[佔位符只能表示一個完整的數據字面量 - 即一個字符串或一個數字。](https://phpdelusions.net/pdo#like) –

回答

1

試試這個例子:檢查你錯在哪裏。

// Get the keyword from query string 
$keyword = $_GET['keyword']; 
// Prepare the command 
$sth = $dbh->prepare('SELECT * FROM `users` WHERE `firstname` LIKE :keyword'); 
// Put the percentage sing on the keyword 
$keyword = "%".$keyword."%"; 
// Bind the parameter 
$sth->bindParam(':keyword', $keyword, PDO::PARAM_STR); 
+0

好吧,所以我試了這個並收到了這條消息'注意:未定義的索引:SessionName中的D:\ xampp \ htdocs \ PPW4 \ SearchSessions.php第9行'它確實從表中返回了所有內容,但沒有返回搜索查詢 – Chris

+0

好了解決了它在變量名稱中發生了錯誤,此工作非常感謝您的幫助 – Chris

+0

我在問題的評論中已經提到它: - >您必須使用正確的sessionName。無論如何,你做到了。 :) – Monty