我的MySql查询出了什么问题


What have I done wrong with my MySql query?

我正试图用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>';

关于单刻度(')和双刻度(")的差异,请参阅此处。