我正试图用PHP为我的MySQL数据库创建一个简单的搜索函数。我尝试过不同的教程,但最终都得到了相同的结果。通过对print_r的测试,我认为问题出在查询上,但我不明白为什么它不起作用。有人有主意吗?我的代码如下:
html
<form action="search.php" method="get">
<div class="input-field">
<input id="search" name="search" type="search" placeholder="Search lesson plans" required>
<label for="search"><i class="material-icons">search</i></label>
<i class="material-icons" id="closesearch">close</i>
</div>
</form>
php
<?php
require_once("db_link.inc.php");
if(isset($_GET['search'])) {
$search = $link->escape_string($_GET['search']);
$query = $link->query('SELECT * FROM LessonPlans WHERE Subject LIKE "%{$search}%" OR Level LIKE "%{$search}%" OR Aim LIKE "%{$search}%" AND Language="English"');
if($query->num_rows){
while($r = $query->fetch_object()){
echo '<div>
<p>'; $r->Subject; echo '</p>
</div>';
}
}
}
?>
表格
LessonPlans
Id | Subject | Level | Aim | Text | Language
有人看到我做错了什么吗?
/Håkan
- 您没有在循环中打印
$r->Subject
- 您没有将
$search
变量正确连接到查询
您的查询应该看起来像(如果您坚持使用单刻度'
):
$query = $link->query('SELECT * FROM LessonPlans WHERE Subject LIKE "%'.$search.'%" OR Level LIKE "%'.$search.'%" OR Aim LIKE "%'.$search.'%" AND Language="English"');
但如果你想继续使用花括号:
$query = $link->query("SELECT * FROM LessonPlans WHERE Subject LIKE '%{$search}%' OR Level LIKE '%{$search}%' OR Aim LIKE '%{$search}%' AND Language='English'");
以及用于显示/回显数据:
echo '<div>
<p>'.$r->Subject.'</p>
</div>';
关于单刻度('
)和双刻度("
)的差异,请参阅此处。