在MySQL中搜索两列中的一个值

时间:2017-06-25 09:22:53

标签: php mysql search joomla

我的php中的MySQL代码有问题。我为Joomla网站制作了自己的搜索插件。 此插件从搜索输入中搜索ONE值。您可以在搜索框中输入公司注册号或公司名称。扩展名应该放在一个表中的两列中。

SQL表“registered_companies”

id | regnumber | name | col4 | col5 | col6 etc
01 | 17333032 | company1 | bla | bla | bla
02 | 36302465 | company2 | bla | bla | bla
03 | 17311161 | company3 | bla | bla | bla
04 | 651664   | company4 | bla | bla | bla
05 | 17318599 | company5 | bla | bla | bla

在我的PHP代码中我有SQL select

$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query = "SELECT *
            FROM registered_companies 
            WHERE ".$searchInput." IN(regnumber, name)";

使用此代码(我尝试了几种变体)它只有在我尝试查找数字(regnumber)时才有效。如果我输入像“company1”这样的文本字符串,SQL会在'where子句'中返回错误1054未知列'company1'。

我尝试使用WHERE regnumber LIKE ".$searchInput; 这很好,但当然命令只搜索一列,而我的所有多个LIKE和OR命令最终都是错误。

我做错了什么?如何键入SQL命令来执行我想要的操作?

请求帮助

3 个答案:

答案 0 :(得分:0)

首先,您需要在搜索字符串中添加%..

$searchInput = "%".$searchInput."%";

然后准备,绑定,执行和获取

$query = "SELECT * FROM registered_companies WHERE regnumber LIKE :searchInput OR name LIKE :searchInput";
$dbResult = $db->prepare($sql);
$dbResult->bindValue(':searchInput', $searchInput, PDO::PARAM_STR);
$dbResult->execute();

while($line = $dbResult->fetch(PDO::FETCH_ASSOC)){ 
   //... do what you need ... 
   // $name = $line['name'];
}

答案 1 :(得分:0)

您应该将SELECT语句转为:

$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query = "SELECT *
            FROM registered_companies 
            WHERE regnumber = ".$searchInput." OR name LIKE '".$searchInput."%'";

这似乎有效,但要注意SQL注入。您应该使用预准备语句。查看准备好的语句的PHP-Docs。 http://php.net/manual/de/mysqli.prepare.php

根据您对regnumbername列的共同决策,您必须更改=LIKE

答案 2 :(得分:0)

您需要处理两种不同的情况(如果$ searchInput是TEXT或INT)。

我建议你阅读'CASE':

MySQL select statement with CASE or IF ELSEIF? Not sure how to get the result