首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql 'Like‘语句两次返回相同的行

问Mysql 'Like‘语句两次返回相同的行
EN

Stack Overflow用户
提问于 2021-08-08 18:57:55
回答 1查看 45关注 0票数 1

我试图根据MySQL查询的结果在PHP中显示一组不同的行,但我看到的是输出到HTML的重复记录。

我的PHP和MySQL代码如下所示:

代码语言:javascript
复制
<h2>Related products</h2>
<?php
    $title=str_replace(' ',',',$_GET['title']);
    $words=explode(',',$title);
    foreach ($words as $word){
    if (strlen($word) > 5){ 
    $res=mysqli_query($link, "SELECT title,id FROM posts WHERE title LIKE '% $word %' or title LIKE '%$word' or title LIKE '$word%' ORDER BY id DESC");
    while ($row=mysqli_fetch_array($res)){
        echo "<a href='/product/".$row['id']."/'><h3>".$row['title']."</h3></a>";
    }}}
?>

我搜索了已经问过的类似问题,并根据他们的指导申请了:

代码语言:javascript
复制
Select DISTINCT.. 

以及:

代码语言:javascript
复制
while ($row=array_unique(mysqli_fetch_array($res)))

然而,它仍然显示出重复的结果。(同一产品在相关产品部分显示3-5次。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-08 20:01:50

最初的问题是重复查询,而不是构建单个查询。

此代码演示如何生成查询,同时还使用参数化查询。

请注意,我无法测试这一点,可能需要一些调整。

代码语言:javascript
复制
<?php
// initialize $title to prevent uninitialized variable warning in while loop
$title = '';

if(isset($_GET['title']) {

    // make pdo connection here; assign to $pdo
    // left to reader to implement 

    $title=str_replace(' ',',',$_GET['title']);
    $words=explode(',',$title);

    $where = [];
    $values = [];
    foreach ($words as $word) {
        if (strlen($word) < 5) { 
            continue;
        }
        $where[] = 'TITLE LIKE ?';
        $values[] = '%' . $word . '%';
    }

    $where = join(' OR ', $where);

    $stmt = $pdo->prepare("SELECT TITLE, ID FROM POSTS WHERE $where");
    $stmt->execute($values);
}
?>

<h2>Related products</h2>
<?php while($title && ($row = $stmt->fetch(PDO::FETCH_ASSOC);)): ?>
    <a href="product<?= $row['id'] ?>">
        <h3><?= $row['title'] ?></h3>
    </a>
<?php endwhile; ?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68703865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档