【问题标题】:Search results with pagination code won't return results带有分页代码的搜索结果不会返回结果
【发布时间】:2015-03-05 18:21:20
【问题描述】:

我很难使用分页代码来获得这个搜索结果。它确实成功地抓取了在另一个页面上的 html 表单中输入的搜索关键字,并将其带入这个 search.php 页面。如果我回显 $search 我会在页面上看到关键字。但是即使我应该进行查询,我也没有得到任何结果。任何人都可以看到可能发生的事情吗?

require "PDO_Pagination.php";

if(isset($_REQUEST["search_text"]) && $_REQUEST["search_text"] != "")
{

    $search = htmlspecialchars($_REQUEST["search_text"]);
    $pagination->param = "&search=$search";
    echo $search;

    $pagination->rowCount("SELECT * FROM stories WHERE stories.genre = $search");
    $pagination->config(3, 5);
    $sql = "SELECT * FROM stories WHERE stories.genre = $search ORDER BY SID ASC LIMIT $pagination->start_row, $pagination->max_rows";
    $query = $connection->prepare($sql);
    $query->execute();
    $model = array();

    while($rows = $query->fetch())
    {
        $model[] = $rows;
    }
}
else
{
    $pagination->rowCount("SELECT * FROM stories");
    $pagination->config(3, 5);
    $sql = "SELECT * FROM stories ORDER BY SID ASC LIMIT $pagination->start_row, $pagination->max_rows";
    $query = $connection->prepare($sql);
    $query->execute();
    $model = array();

    while($rows = $query->fetch())
    {
        $model[] = $rows;
    }
}

【问题讨论】:

  • 可能与WHERE stories.genre = $search"); 相关,特别是=?通常你需要一个LIKE
  • 感谢您试一试。是的,我最初确实将它设置为 = '%$search%' 但这也不起作用。没有结果。我最近才尝试将其更改为 = $search。无论哪种方式,都不是……
  • 我的意思是我第一次使用它并没有用。但下面 JC Sama 的回答是让结果看起来像
  • 我明白了。在您的评论中,您说 = %$search% 而不是 LIKE %$search%。这就是我重申它的原因。但如果它有效,那就太好了!

标签: php pdo


【解决方案1】:
$query = "SELECT * FROM stories";

if(isset($_REQUEST["search_text"]) && $_REQUEST["search_text"] != "")
{
    $search = htmlspecialchars($_REQUEST["search_text"]);
    $pagination->param = "&search=$search";
    $query .= " WHERE genre LIKE '%$search%'";
}
// No need for else statement.
$pagination->rowCount($query);
$pagination->config(3, 5);
$query .= " ORDER BY SID ASC LIMIT {$pagination->start_row}, {$pagination->max_rows}";

$stmt = $connection->prepare($query);
$stmt->execute();
$model = $stmt->fetchAll();
var_dump($model);

【讨论】:

  • 有趣。只是其他人把事情搞砸了吗?这会在 var_dump 中得到结果,尽管它不会显示在页面上。也许是因为它似乎复制了数组中每个变量的结果。 Var_dump 看起来像这样:array(1) { [0]=> array(20) { ..other variables... ["genre"]=> string(7) "Drama" [4]=> string(7) “戏剧”。所以也许我现在只需要弄清楚如何访问数据并回显它......
  • 我明白了:$model[0]['genre'] 来回显值
  • 您可以删除 while 循环并改用 fetchAll
【解决方案2】:

在您的查询中执行:

WHERE stories.genre LIKE '%string%');

代替:

WHERE stories.genre = 'string');

因为 equals 将希望从字面上等于该字段。

【讨论】:

    猜你喜欢
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多