Php 将数组内插到MySQL查询中

Php 将数组内插到MySQL查询中,php,mysql,explode,implode,Php,Mysql,Explode,Implode,所以我有一个博客系统,我想为“相关新闻”建立一个部分,我不是在做一个“标签”系统,只是简单地搜索和存储文章的当前标题(从数据库中提取),并将其分解,以便以后能够将所有的词放入一个查询中,稍后的查询将搜索数据库中的所有标题,以查找这些单词中的任何一个,如果找到,将在列表中返回标题。以下是相关代码: // note to stackoverflow peeps, $row_object_title is just the title that is pulled form the database

所以我有一个博客系统,我想为“相关新闻”建立一个部分,我不是在做一个“标签”系统,只是简单地搜索和存储文章的当前标题(从数据库中提取),并将其分解,以便以后能够将所有的词放入一个查询中,稍后的查询将搜索数据库中的所有标题,以查找这些单词中的任何一个,如果找到,将在列表中返回标题。以下是相关代码:

// note to stackoverflow peeps, $row_object_title is just the title that is pulled form the database
$row_object_title_lower = strtolower($row_object_title);
$keywords = explode(" ",$row_object_title_lower);
稍后在页面上运行的代码:

$keywords_imploded = implode("','",$keywords);
$myquery = sql_query("SELECT object_title FROM table WHERE object_title IN ('$keywords_imploded')
现在我试图通过打印标题来列出标题,但没有显示任何内容

我确信数据库中有匹配的标题

谢谢

试试:

$keywords_imploded = join("','", $keywords);
$myquery = sql_query("SELECT object_title FROM table WHERE object_title IN ($keywords_imploded)

您的关键字数组是通过以下方式生成的:

$keywords = explode(" ",$row_object_title_lower);
如果你有一个像“我的超级博客”这样的标题呢?你会得到:

$keywords = array( "My", "Super", "Blog", "Post" );
稍后,您将使用这些内爆的值进行查询:

$keywords_imploded = implode("','",$keywords);
$myquery = sql_query("SELECT object_title FROM table WHERE object_title IN ('$keywords_imploded')
SELECT
查询如下所示:

SELECT object_title FROM table WHERE object_title IN ( 'My', 'Super', 'Blog', 'Post' );
我不认为那会找到什么


你需要重新评估你是如何处理标题列表的(我想这就是你想要的,对吗?)

似乎你误解了IN子句的工作原理


IN子句将在右侧的值列表中查找左侧的内容。例如:在(2,3,5)中,如果id在该列表中,它将返回true。你的情况正好相反

像这样的东西应该适合你想要的东西,但可能有更好的选择

$sql = '';
foreach ($keywords AS $keyword)
{
    if ($sql != '')
        $sql .= ' OR ';

    $sql .= "object_title LIKE '%$keyword%'";
}

$query = 'SELECT object_title FROM table WHERE '.$sql;
%是一个通配符


只是请记住首先转义这些值。

是的,在创建一个严重的噩梦之前,您需要在其中添加一些值。回显$myquery以说明发生了什么wrong@Askanison4这将显示:资源id#17您需要回显查询字符串,例如
$sql=“SELECT…”
,您正在回显查询结果。IN子句将在右侧的值列表中查找左侧的内容。例如:在(2,3,5)中,如果id在该列表中,它将返回true。你的情况正好相反。很可能您必须使用以下几种方法来构建查询:object\u title LIKE%keyword%
IN(“$keywords\u introded”)
——如果您使用introde而不使用两个倒逗号,就像在OP中一样,这将打破我希望我可以对您进行否决表决,也就是说,仅针对整数,字符串需要两个引号。如果我错了,请纠正我,所以你所做的就是用“join()”替换内爆???你知道join只是InbodeIt的别名。。。我的收件箱里有一条消息。单击它并看到它被标记为已接受。5秒后它消失了…@超级音效lol谢谢,至少我知道我没有在那里失去理智:p