我的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命令来执行我想要的操作?
请求帮助
答案 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
根据您对regnumber
和name
列的共同决策,您必须更改=
和LIKE
。
答案 2 :(得分:0)
您需要处理两种不同的情况(如果$ searchInput是TEXT或INT)。
我建议你阅读'CASE':
MySQL select statement with CASE or IF ELSEIF? Not sure how to get the result