Php CodeIgniter SQL查询包含撇号并按特定顺序搜索每一列

Php CodeIgniter SQL查询包含撇号并按特定顺序搜索每一列,php,mysql,sql,codeigniter,Php,Mysql,Sql,Codeigniter,首先,我不是一个程序员,我一直在努力为自己完成一个项目,并试图从谷歌学习 使用的技术:CodeIgniter 2.1.2、PHP5.3、MySQL 我的页面上有一个搜索关键字框,我希望它能搜索整个表,但按特定顺序显示结果 我目前有一个SQL查询,它不使用撇号,也不按列对结果排序 function search($keyword) { $query="SELECT * FROM HWC WHERE ModelName LIKE '%{$keyword}%' OR Toy LIKE '

首先,我不是一个程序员,我一直在努力为自己完成一个项目,并试图从谷歌学习

使用的技术:CodeIgniter 2.1.2、PHP5.3、MySQL

我的页面上有一个搜索关键字框,我希望它能搜索整个表,但按特定顺序显示结果

我目前有一个SQL查询,它不使用撇号,也不按列对结果排序

function search($keyword)
 {
  $query="SELECT *
  FROM HWC
  WHERE ModelName LIKE '%{$keyword}%' OR Toy LIKE '%{$keyword}%'OR Year LIKE '%{$keyword}%'
  OR Col LIKE '%{$keyword}%'OR Series LIKE '%{$keyword}%'OR Color LIKE '%{$keyword}%'
  OR Tampo LIKE '%{$keyword}%'OR BaseColor LIKE '%{$keyword}%'OR BaseType LIKE '%{$keyword}%'
  OR WindowColor LIKE '%{$keyword}%'OR InteriorColor LIKE '%{$keyword}%'OR WheelType LIKE '%{$keyword}%'
  OR Country LIKE '%{$keyword}%'OR 'Series#' LIKE '%{$keyword}%'OR Notes LIKE '%{$keyword}%'";

  $result=$this->db->query($query);
  $result=$result->result_array();

  return $result;
}
我知道这是错误的,这是暂时的,让一些事情的工作

老实说,我可以把它分成3类进行分类

ModelName
Toy
Other (All the rest)

我还希望我构建的SQL查询支持分页,但这应该不难,因为我读到的内容有一个偏移量和限制。

您可能没有注意到,但您的查询中有一个错误year是您的列名,mysql还有一个函数year,因此它将生成您在列名上加上反勾“`”的错误如果您不确定它是否会与任何函数名冲突,那么最佳做法是在所有列上添加反勾号,这样就不会有冲突的机会,所以看起来是这样的

SELECT *
  FROM HWC
  WHERE `ModelName` LIKE '%{$keyword}%' OR `Toy` LIKE '%{$keyword}%' OR `Year` LIKE '%{$keyword}%'
  OR `Col` LIKE '%{$keyword}%'OR `Series` LIKE '%{$keyword}%' OR `Color` LIKE '%{$keyword}%' 
  OR `Tampo` LIKE '%{$keyword}%' OR `BaseColor` LIKE '%{$keyword}%' OR `BaseType` LIKE '%{$keyword}%'
  OR `WindowColor` LIKE '%{$keyword}%' OR `InteriorColor` LIKE '%{$keyword}%' OR `WheelType` LIKE '%{$keyword}%'
  OR `Country` LIKE '%{$keyword}%' OR `Series#` LIKE '%{$keyword}%' OR `Notes` LIKE '%{$keyword}% '
对于
orderby
结果集,您可以使用多个列进行排序,如

按col1、col2、col3排序

对于结果的分页,您使用mysql的
LIMIT
函数,起始索引和结束索引如下

LIMIT 0,10
或对于前10个结果,您可以简单地指定
LIMIT 10
保留在我的范围内,该限制将在查询结束时应用默认情况下,它将按升序排列结果集,但如果您希望结果集按降序排列,则可以指定顺序
DESC

SELECT *
  FROM HWC
  WHERE `ModelName` LIKE '%{$keyword}%' OR `Toy` LIKE '%{$keyword}%' OR `Year` LIKE '%{$keyword}%'
  OR `Col` LIKE '%{$keyword}%'OR `Series` LIKE '%{$keyword}%' OR `Color` LIKE '%{$keyword}%' 
  OR `Tampo` LIKE '%{$keyword}%' OR `BaseColor` LIKE '%{$keyword}%' OR `BaseType` LIKE '%{$keyword}%'
  OR `WindowColor` LIKE '%{$keyword}%' OR `InteriorColor` LIKE '%{$keyword}%' OR `WheelType` LIKE '%{$keyword}%'
  OR `Country` LIKE '%{$keyword}%' OR `Series#` LIKE '%{$keyword}%' OR `Notes` LIKE '%{$keyword}% '
ORDER BY `ModelName`, `Toy` LIMIT 0,10'

如果不在列名上添加反勾号,请确保它们是唯一的,并在运算符、函数等和列名之间留出空格,如 如“{$keyword}%”或应使用空格如“{$keyword}%”或


您可能没有注意到,但是您的查询中有一个错误,year是您的列名,mysql也有一个函数year,因此它将生成您在列名上加上反勾“`”的错误,如果您不确定它是否会与任何函数名冲突,最佳做法是在所有列上添加反勾号,这样就不会有冲突的机会,所以看起来是这样的

SELECT *
  FROM HWC
  WHERE `ModelName` LIKE '%{$keyword}%' OR `Toy` LIKE '%{$keyword}%' OR `Year` LIKE '%{$keyword}%'
  OR `Col` LIKE '%{$keyword}%'OR `Series` LIKE '%{$keyword}%' OR `Color` LIKE '%{$keyword}%' 
  OR `Tampo` LIKE '%{$keyword}%' OR `BaseColor` LIKE '%{$keyword}%' OR `BaseType` LIKE '%{$keyword}%'
  OR `WindowColor` LIKE '%{$keyword}%' OR `InteriorColor` LIKE '%{$keyword}%' OR `WheelType` LIKE '%{$keyword}%'
  OR `Country` LIKE '%{$keyword}%' OR `Series#` LIKE '%{$keyword}%' OR `Notes` LIKE '%{$keyword}% '
对于
orderby
结果集,您可以使用多个列进行排序,如

按col1、col2、col3排序

对于结果的分页,您使用mysql的
LIMIT
函数,起始索引和结束索引如下

LIMIT 0,10
或对于前10个结果,您可以简单地指定
LIMIT 10
保留在我的范围内,该限制将在查询结束时应用默认情况下,它将按升序排列结果集,但如果您希望结果集按降序排列,则可以指定顺序
DESC

SELECT *
  FROM HWC
  WHERE `ModelName` LIKE '%{$keyword}%' OR `Toy` LIKE '%{$keyword}%' OR `Year` LIKE '%{$keyword}%'
  OR `Col` LIKE '%{$keyword}%'OR `Series` LIKE '%{$keyword}%' OR `Color` LIKE '%{$keyword}%' 
  OR `Tampo` LIKE '%{$keyword}%' OR `BaseColor` LIKE '%{$keyword}%' OR `BaseType` LIKE '%{$keyword}%'
  OR `WindowColor` LIKE '%{$keyword}%' OR `InteriorColor` LIKE '%{$keyword}%' OR `WheelType` LIKE '%{$keyword}%'
  OR `Country` LIKE '%{$keyword}%' OR `Series#` LIKE '%{$keyword}%' OR `Notes` LIKE '%{$keyword}% '
ORDER BY `ModelName`, `Toy` LIMIT 0,10'

如果不在列名上添加反勾号,请确保它们是唯一的,并在运算符、函数等和列名之间留出空格,如 如“{$keyword}%”或应使用空格如“{$keyword}%”或