PHP PDO多列搜索

时间:2017-01-17 20:47:44

标签: php mysql pdo

我正在尝试使用PDO在PHP中创建搜索。它有两个输入字段。目前,如果我删除其中一个字段及其关联的PHP代码,它将从数据库中检索数据。但是,当两者都存在时,"笑话"输入字段内容仅限制数据,如果" author"输入存在。

这是HTML:

navigationController?.hidesBarsOnSwipe = true

这是PHP:

<div>
    <form action="search.php" method="get">
        <label for="text">Joke</label>
        <input type="text" name="text" id="text">

        <label>Author</label>
        <label for="author">author</label>
        <select name="author" id="author">
            <option>select</option>
            <option value="1">1</option>
            <option value="2">2</option>
        </select>

        <button type="submit" class="btn btn-orange">Go</button>
    </form>
</div>

我没有收到任何错误。

有人可以看看吗?

1 个答案:

答案 0 :(得分:0)

这里最好的模式是累积一个条件列表,并在完成后用implode折叠它们:

$bind = [ ];
$conds = [ ];

if ($_GET)
{
    if ($_GET["text"] && $_GET["text"] != "") {
      $conds[] = "joke_text like :joke_text";
      $bind[':joke_text'] = "%{$_GET['text']}%";
    }

    if ($_GET["author"] && $_GET["author"] != "") {
      $conds[] = "author_id = :author_id";
      $bind[':author_id'] = "{$_GET['author']}";
    }

    $stmt = $dbConnection->prepare($query . ($conds ? " WHERE " . implode(" AND ", $conds) : "");
    $stmt->execute($bind);
    $rows = $stmt->fetchAll();

    var_dump($rows);
}

这样,WHERE子句只有在有重要事情需要时才会出现,并且只在必要时引入AND语句。