首页 > 解决方案 > 在 php mysql 中使用 where 条件搜索输入数据

问题描述

如何使用where条件制作搜索数据?在这里...

我有表学生

CREATE TABLE `student` (
  `id` int(11) NOT NULL,
  `id_card` varchar(100) NOT NULL,
  `name` varchar(100) DEFAULT NULL,
  `class` varchar(30) DEFAULT NULL,
  `student_guardian` varchar(100) DEFAULT NULL,
  `major` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

我用 PHP 和 MYSQL 做了一个 CRUD,然后我用输入类型和按钮提交搜索数据。但我想搜索数据在哪里major,在Mathematic这个表中我输入数据主要是Mathematic,,,,ScienceArtMusic

这是我想要的条件

SELECT * 
  FROM student 
 WHERE student.major = 'Mathematic'

这是在输入文本中搜索的功能:

function search_student($keyword) {
    $query = "
     SELECT * 
       FROM student
      WHERE id_card LIKE '%$keyword%' 
         OR name LIKE '%$keyword%' 
         OR student_guardian LIKE '%$keyword%' 
         OR student.major = 'Mathematic'
            ";
    return query($query);
}

这也是功能:

function query($query) {
    global $conn;
    $result = mysqli_query($conn, $query);
    $rows = [];
    while($row = mysqli_fetch_assoc($result) ) {
        $rows[] = $row;
    }
    return $rows;
}

当我搜索时,除了数学也出现了。什么问题?

标签: phpmysql

解决方案


如果您总是希望专业是数学,而其他任何文件都需要包含关键字,那么您需要对 WHERE 条件进行分组。如果任何条件返回 true,您当前的查询将认为它匹配。

像这样的东西:

WHERE 
    (id_card LIKE ? OR name LIKE ? OR student_guardian LIKE ?) 
    AND major = 'Mathematic'

注意:我已将您手动注入的变量替换为,这是您使用参数化预准备语句?时值的占位符,强烈建议您这样做。


推荐阅读