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

使用%通配符在PHP准备的语句中实现LIKE,php,mysql,Php,Mysql,我正在为我的数据库设置一个基本的搜索查询,并将其返回到一个表中。我遇到了一个关于在准备好的语句中使用的语法的问题 我的初始设置基于一个w3schools示例 搜索输入来自html页面上的表单。这将调用php文件 在php文件中,我连接到SQL服务器,并执行以下操作: $search = $_POST['search']; $stmt = $link->prepare("SELECT lname, fname FROM planner WHERE lname LIKE ?"); $stmt

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

我的初始设置基于一个w3schools示例

搜索输入来自
html页面
上的表单。这将调用
php文件

php文件中
,我连接到
SQL服务器
,并执行以下操作:

$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";
}
$search=$\u POST['search'];
$stmt=$link->prepare(“从规划器中选择lname,fname,lname像什么?”);
$stmt->bind_参数('s',$search);
$stmt->execute();
$result=$stmt->get_result();
打印(结果);
如果($result->num_rows>0){
呼应“姓”和“名”;
而($row=$result->fetch_assoc()){
回显“$row[“lname”]。$row[“fname”]。”;
}
回声“;
}否则{
回显“0结果”;
}
我遇到的挑战是如何定义
参数
,以便在准备好的语句构造中对LIKE进行计算。W3Schools给出了许多类似于
的参数的例子,使用了
字母和%
的各种组合,但我不确定在准备好的语句中放在哪里。我希望lname结果基于html页面上表单提供的搜索条件

该站点上的一些旧帖子指向在字符串中设置标准。我不确定它到底是怎么工作的。如果这是一个很好的方法,我想知道更多关于这个方法的情况


感谢你们所能提供的任何帮助。

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

这篇文章正好说明了我希望将所有内容整合在一起的目的:

以下是“略微”更新的代码:

    $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";
}
$search=$\u POST['search'].%';
//echo($搜索);
$stmt=$link->prepare(“从规划器中选择lname,fname,lname像什么?”);
$stmt->bind_参数('s',$search);
$stmt->execute();
$result=$stmt->get_result();
如果($result->num_rows>0){
呼应“姓”和“名”;
而($row=$result->fetch_assoc()){
回显“$row[“lname”]。$row[“fname”]。”;
}
回声“;
}否则{
回显“0结果”;
}

您可以在sql中简单地执行like的关键字工作

->仅搜索lname的步骤

$search = $_POST['search'];
$stmt = $link->prepare("SELECT * FROM planner WHERE lname like ?");
$stmt->execute(array("%".$search."%"));
->要同时搜索lname和fname,只需执行以下操作->

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

在变量值中包含
%
,因此如果您有
$name
,则必须添加通配符,如
$name.'%'
以开头。不要像这样将其添加到SQL中
like?%
这是一个常见问题。或者在您的示例中,
bind_param('s',$search.'%')您要问的基本问题是LIKE子句的运算符是什么。答案是,
%
是一种通配符搜索,搜索0个或更多字符完全匹配单个字符。因此
te%
将匹配
test
tea
teal
,而
te
将只匹配
tea
。您是否有用于数据库工作的
PHPmyadmin
?如果是这样的话,将查询本身放在那里运行,如果您在
PHPmyadmin
中得到结果,而不是您知道代码中有其他错误的页面,那么就这样做。您可以执行
echo str_替换(“?”、““$search””、$sql)
根据存储在
$sql
等中的查询来输出查询。不要用它来生成查询,因为它会破坏准备查询的目的。您需要使用一个通配符
john%
。如果这是
此站点上的几篇旧帖子中的一篇
请更新问题以显示您对通配符的使用情况
%
。它将搜索最后的索引匹配项,最好是->$search='%'。$\u POST['search'].%';它将搜索整个字符串。谢谢你。。我最近遇到了这个问题。这很接近,但是
execute
绑定是PDO独有的。OP使用的是
mysqli
。不过这是个好东西