我试图根据MySQL查询的结果在PHP中显示一组不同的行,但我看到的是输出到HTML的重复记录。
我的PHP和MySQL代码如下所示:
<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>";
}}}
?>我搜索了已经问过的类似问题,并根据他们的指导申请了:
Select DISTINCT.. 以及:
while ($row=array_unique(mysqli_fetch_array($res)))然而,它仍然显示出重复的结果。(同一产品在相关产品部分显示3-5次。)
发布于 2021-08-08 20:01:50
最初的问题是重复查询,而不是构建单个查询。
此代码演示如何生成查询,同时还使用参数化查询。
请注意,我无法测试这一点,可能需要一些调整。
<?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; ?>https://stackoverflow.com/questions/68703865
复制相似问题