Php 限制后sql结果
我从头开始建立一个搜索引擎Php 限制后sql结果,php,mysql,search-engine,Php,Mysql,Search Engine,我从头开始建立一个搜索引擎 它扫描多个数据库中的许多不同表 它只搜索指定的列 在多词搜索的情况下,搜索词为explode() 它使用foreach遍历表 我在使用限制构建代码库时遇到问题。我希望它只显示不同的 例如,如果我搜索Joe Schmoe,我的代码将首先搜索first=Joe,然后搜索last=Schmoe,它将显示每次搜索的结果。但我希望它只显示两次搜索的一个结果 <?php echo "<h1>Search Results</h1>"; echo
- 它扫描多个数据库中的许多不同表李>
- 它只搜索指定的列
- 在多词搜索的情况下,搜索词为explode()
- 它使用
遍历表李>foreach
限制构建代码库时遇到问题。我希望它只显示不同的
例如,如果我搜索Joe Schmoe
,我的代码将首先搜索first=Joe
,然后搜索last=Schmoe
,它将显示每次搜索的结果。但我希望它只显示两次搜索的一个结果
<?php
echo "<h1>Search Results</h1>";
echo "<table style='width: 100%;'>";
$a = $_GET["q"];
$b = explode(" ", $a);
include 'db_connect3.php';
mysql_select_db("db440035579", $con);
foreach($b as $c){
$sql="SELECT * FROM users WHERE first LIKE '%$c%' || last LIKE '%$c%'";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result))
{
echo "<a href='applications.php?act=search&uid=$row[7]'>$row[5], $row[4]</a>";
}
}
mysql_close($con);
?>
首先
其次,插入PDO
只需要几行代码
第三,全文搜索更好
最后:
使用数组。我假设$row[0]
是user.id
。这样,每个ID
$cache = array();
foreach($b as $c){
$sql="SELECT * FROM users WHERE first LIKE '%$c%' || last LIKE '%$c%'";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result)){
$cache[$row[0]] = $row;
}
}
foreach($cache as $row){
echo "<a href='applications.php?act=search&uid=$row[7]'>$row[5], $row[4]</a>";
}
$cache=array();
foreach($b为$c){
$sql=“从第一个类似“%$c%”的用户中选择*;最后一个类似“%$c%””;
$result=mysql\u查询($sql);
while($row=mysql\u fetch\u数组($result)){
$cache[$row[0]]=$row;
}
}
foreach($缓存为$行){
回声“;
}
您是否使用不同的数据库探索过“全文搜索”选项。这看起来诱人吗<代码>选择id,根据文章中的(“教程”)匹配(标题、正文)代码>为什么这会被提升?您的代码将只搜索使用的最后一个单词,您非常容易受到注入攻击,并且您仍然使用mysql_*函数,而不是PDO或mysqli准备好的语句我知道我在使用mysql的功能,这是因为这个网站起源于旧的风格,我的公司在最后期限前完成了它。当它运行正常并启动后,我将致力于升级到PDO和mysqli。。至于其他信息,可以使用注入,但是您只看到了一小部分,我使用3个不同的数据库和大约30个表,每个表中的列数有限,并且使用关键字数据库中的下拉列表搜索项目的详细信息。事情变得复杂了,这就是为什么我找不到我真正需要的东西。