使用%通配符在PHP准备好的语句中实现LIKE

时间:2017-08-04 00:10:58

标签: php mysql

我正在为我的数据库设置基本搜索查询并将其返回到表中。我遇到了在预准备语句中使用的语法问题。

我的初步设置基于w3schools的例子。

搜索输入来自html page上的表单。这会调用php file

php file内,我连接到SQL server并执行以下操作:

$search = $_POST['search'];

$stmt = $link->prepare("SELECT lname, fname FROM planner WHERE lname LIKE ?");
$stmt->bind_param('s', $search);
$stmt->execute();
$result = $stmt->get_result();

print_r($result);

if ($result->num_rows > 0) {
echo "<table><tr><th>Last Name</th><th>First Name</th></tr>";
while($row = $result->fetch_assoc()) {
    echo "<tr><td>".$row["lname"]."</td><td>".$row["fname"]."</td></tr>";
}
echo "</table>";
} else {
echo "0 results";
}

我遇到的挑战是如何定义LIKE的parameters以在预准备语句构造中进行评估。 W3Schools使用LIKE parameters的各种组合提供了大量letters and %的例子,但我不确定在准备好的陈述中将这些放在哪里。我希望将lname结果基于html页面上的表单提供的搜索条件。

此网站上的几个旧帖子指向在字符串中设置条件。我不确定它是如何工作的。如果这是一个很好的方法,我想更多地了解这种方法发生了什么。

感谢您提供的所有帮助。

2 个答案:

答案 0 :(得分:5)

我要感谢大家对此的帮助。 ArtisticPhoenix让我朝着正确的方向前进。

这篇文章标志着我一直在寻找的所有内容:

Adding a wildcard character to a string in PHP

这里&#34;稍微&#34;更新的代码:

    $search = $_POST['search'].'%';

    //echo($search);

    $stmt = $link->prepare("SELECT lname, fname FROM planner WHERE lname LIKE ?");
    $stmt->bind_param('s', $search);
    $stmt->execute();
    $result = $stmt->get_result();

    if ($result->num_rows > 0) {
    echo "<table><tr><th>Last Name</th><th>First Name</th></tr>";
    while($row = $result->fetch_assoc()) {
        echo "<tr><td>".$row["lname"]."</td><td>".$row["fname"]."</td></tr>";
    }
    echo "</table>";
} else {
    echo "0 results";
}

答案 1 :(得分:1)

您可以在sql中执行类似关键字的工作,只需

- &GT;仅搜索lname

$(function() {
    $('a[data-toggle="tab"]').on('click', function(e) {
        window.localStorage.setItem('activeTab', $(e.target).attr('href'));
        console.log("ok0");
        window.localStorage.setItem('activeTab1', $(e.target).attr('data-ajax'));
        console.log("ok1");
    });
    var activeTab  = window.localStorage.getItem('activeTab');
        console.log("ok2");
    var activeTab1 = window.localStorage.getItem('activeTab1');
        console.log("ok3");
    if (activeTab) {
        $('#myTab a[href="' + activeTab + '"], [data-ajax="' + activeTab1 + '"]').tab('show');
        window.localStorage.removeItem("activeTab");
        console.log("ok4");
    }
});

- &GT;要搜索lname和fname,只需执行此操作 - &gt;

$search = $_POST['search'];
$stmt = $link->prepare("SELECT * FROM planner WHERE lname like ?");
$stmt->execute(array("%".$search."%"));