查询PHP/MySql和/或高级搜索
我不熟悉php和mysql,所以我需要一些查询方面的帮助。这是我的sql查询查询PHP/MySql和/或高级搜索,php,mysql,search,parameters,Php,Mysql,Search,Parameters,我不熟悉php和mysql,所以我需要一些查询方面的帮助。这是我的sql查询 SELECT * FROM table1 WHERE (Name LIKE '%$keyword%' OR ZipCode LIKE '%$keyword%') AND Category LIKE '$category' AND Country LIKE '$country' LIMIT $start, $limit 现在我想做的是 此查询应使用带有Name关键字的文本字段搜索带有Name或ZipCode的列名。即关
SELECT * FROM table1 WHERE (Name LIKE '%$keyword%' OR ZipCode LIKE '%$keyword%') AND Category LIKE '$category' AND Country LIKE '$country' LIMIT $start, $limit
现在我想做的是
用更简单的话来说,如果选择了things关键字、country或category中的任何一个,则搜索应相应地显示结果。此外,如果输入了所有字段,它也应该工作。我设法做到了一半,但有时它给我错误的结果。请提供帮助。我建议使用几个不同的查询(每个搜索参数组合一个),使用php决定使用哪个查询,或者使用php动态构建一个查询 请注意,使用以%开头的like可能会非常慢 如果你真的想把它当作一句话(我不推荐这样做),那么:- 或者动态地建立它
$ConditionArray = array();
if ($keyword != '') $ConditionArray[] = "(Name LIKE '%$keyword%' OR ZipCode LIKE '%$keyword%' OR '$keyword' = '')";
if ($category != '') $ConditionArray[] = "Category = '$category'";
if ($country != '') $ConditionArray[] = "Country = '$country'";
if (count($ConditionArray) > 0)
{
$query = "
SELECT *
FROM table 1
WHERE ".implode(' AND ', $ConditionArray);
}
我建议使用几个不同的查询(每个搜索参数组合一个),使用php来决定使用哪个查询,或者使用php动态构建一个查询 请注意,使用以%开头的like可能会非常慢 如果你真的想把它当作一句话(我不推荐这样做),那么:- 或者动态地建立它
$ConditionArray = array();
if ($keyword != '') $ConditionArray[] = "(Name LIKE '%$keyword%' OR ZipCode LIKE '%$keyword%' OR '$keyword' = '')";
if ($category != '') $ConditionArray[] = "Category = '$category'";
if ($country != '') $ConditionArray[] = "Country = '$country'";
if (count($ConditionArray) > 0)
{
$query = "
SELECT *
FROM table 1
WHERE ".implode(' AND ', $ConditionArray);
}
您可以检查设置了哪些字段,并在运行时进行相应的查询。你可以做这样的事情:
$query = "";
$keyword = $_REQUEST['keyword'];
$country = $_REQUEST['country'];
$category = $_REQUEST['category'];
if(isset($keyword)){//if keyword set goes here
$query = "SELECT * FROM table1 WHERE Name LIKE '%$keyword%' OR ZipCode LIKE '%$keyword%' OR country LIKE '%$keyword%'";
if(isset($category)){
$query .= "AND category LIKE '$category'";
}
if(isset($country)){
$query . = "AND country LIKE '$country'"
}
}else if (isset($category)){ //if keyword not set but category set then goes here
$query = "SELECT * FROM table1 WHERE category LIKE '$category'";
if(isset($country)){
$query . = "AND country LIKE '$country'";
}
}else if(isset($country)){//if only country set goes here
$query = "SELECT * FROM table1 WHERE country LIKE '$country'"
}
您可以检查设置了哪些字段,并在运行时进行相应的查询。你可以做这样的事情:
$query = "";
$keyword = $_REQUEST['keyword'];
$country = $_REQUEST['country'];
$category = $_REQUEST['category'];
if(isset($keyword)){//if keyword set goes here
$query = "SELECT * FROM table1 WHERE Name LIKE '%$keyword%' OR ZipCode LIKE '%$keyword%' OR country LIKE '%$keyword%'";
if(isset($category)){
$query .= "AND category LIKE '$category'";
}
if(isset($country)){
$query . = "AND country LIKE '$country'"
}
}else if (isset($category)){ //if keyword not set but category set then goes here
$query = "SELECT * FROM table1 WHERE category LIKE '$category'";
if(isset($country)){
$query . = "AND country LIKE '$country'";
}
}else if(isset($country)){//if only country set goes here
$query = "SELECT * FROM table1 WHERE country LIKE '$country'"
}
你真的应该添加你的代码;但作为一个粗略的指导-您需要检查在
$\u请求中设置了哪些参数,然后适当地构建您的查询-如果没有设置关键字,则无需搜索名称或ZipCode。此外,请确保阅读有关您应该真正添加代码的信息;但作为一个粗略的指导-您需要检查在$\u请求中设置了哪些参数,然后适当地构建您的查询-如果没有设置关键字,则无需搜索名称或ZipCode。另外,请确保阅读您的观点是正确的,但对于这个特定任务,我并不担心这一点。我想我应该试着做几个查询,但这是不可能的,只有一个查询使用或/和?嘿,谢谢你的建议。我能够以稍微不同的方式实现结果,但是的,我决定动态地进行查询,而不仅仅是一个查询,因为这很容易混淆。再次感谢:)你说得对,但对于这个特殊的任务,我并不担心。我想我应该试着做几个查询,但这是不可能的,只有一个查询使用或/和?嘿,谢谢你的建议。我能够以稍微不同的方式实现结果,但是的,我决定动态地进行查询,而不仅仅是一个查询,因为这很容易混淆。再次感谢:)这是最好的答案。非常感谢@Smita这真的很容易理解,也很有帮助。:)正如已经指出的,这很容易受到array('keyword'=>'anything;DROP TABLE table1;--')
类sql注入攻击。正如Patrick Dougall正确地提到的,这个回复很好地理解了这个想法,但请记住,这是一个想法,永远不要将此代码放在生产环境中。至少mysqli真正的转义非常简单,但更好的是,使用:params构造查询,并使用PDO。为了简单起见,您可以绑定所有变量,是否执行$variable=isset($\u POST[“variable”])$_POST[“变量”]:“”代码>最后执行。这是最好的答案。非常感谢@Smita这真的很容易理解,也很有帮助。:)正如已经指出的,这很容易受到array('keyword'=>'anything;DROP TABLE table1;--')
类sql注入攻击。正如Patrick Dougall正确地提到的,这个回复很好地理解了这个想法,但请记住,这是一个想法,永远不要将此代码放在生产环境中。至少mysqli真正的转义非常简单,但更好的是,使用:params构造查询,并使用PDO。为了简单起见,您可以绑定所有变量,是否执行$variable=isset($\u POST[“variable”])$_POST[“变量”]:“”代码>并最终执行。