Mysql没有返回预期的结果

时间:2017-04-21 13:40:41

标签: php mysql

我已经尝试了很多不同的变体,我无法弄清楚为什么这不会返回我预期的结果。这是我现在的代码。我在LIKE之后尝试了SQL语句中的变量的许多变体,并且没有按预期返回数组。我还验证了$ search变量确实包含正确的字符串。

index.php动作开关(这可以正常工作):

case 'search_result':
    $search = filter_input(INPUT_POST, 'searchBar');
    $results = search_books($search);
    if($results == NULL){
        include('/view/search_null.php');
    }else {
        include('/view/search_results.php');
    }
    break; 

我的数据库搜索功能:

function search_books($search_word){
global $db;
$query = ' SELECT * FROM books
           WHERE bookTitle LIKE :search_word  ';
$statement = $db->prepare($query);
$statement->bindValue(":search_word", $search_word);
$statement->execute();
$results_search = $statement->fetchAll();
$statement->closeCursor();
return ($results_search);
}

每次$ results为NULL并将我踢到我的页面时返回没有结果,即使它应该返回结果。在该页面上,我验证$ search中有正确的单词,$ results和$ results_search的数组大小为0.

(是的,我知道我应该清理$ search,这不是现在的,只是为了作业)

3 个答案:

答案 0 :(得分:1)

您要寻找的是通过向搜索字词添加%来使用通配符包围搜索字词,如下所示:

$search_word = '%' . $search_word . '%';

然后只需准备 / 绑定 / 执行。这是更改后的代码:

function search_books($search_word){
    global $db;
    $search_word = '%' . $search_word . '%'; // added
    $query = ' SELECT * FROM books
           WHERE bookTitle LIKE :search_word  ';
    $statement = $db->prepare($query);
    $statement->bindValue(":search_word", $search_word);
    $statement->execute();
    $results_search = $statement->fetchAll();
    $statement->closeCursor();
    return ($results_search);
}

<小时/> 查询看起来像参数得到它的位置:

SELECT * FROM books WHERE bookTitle LIKE '%something here%'

这会查找包含 $search_word的任何内容。例如:

  

$search_wordRings
  The Lord of the Rings: The Return of the King将是匹配。

您可以在此处详细了解:Pattern Matching

答案 1 :(得分:0)

<强>更新:

您将变量与查询绑定但未将绑定值放入查询中,因此请使用以下代码:(希望它适合您!)

function search_books($search_word){
  global $db;
  $query = " SELECT * FROM books
           WHERE bookTitle LIKE % :search_word %";
  $statement = $db->prepare($query);
  $statement->bindValue(":search_word", $search_word);
  $statement->execute();
  $results_search = $statement->fetchAll();
  $statement->closeCursor();
  return ($results_search);
}

答案 2 :(得分:0)

.text-title {}

这就是你所需要的一切