使用%通配符在PHP准备的语句中实现LIKE
我正在为我的数据库设置一个基本的搜索查询,并将其返回到一个表中。我遇到了一个关于在准备好的语句中使用的语法的问题 我的初始设置基于一个w3schools示例 搜索输入来自使用%通配符在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
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
。不过这是个好东西