首页 > 解决方案 > PHP MySqli 显示相似术语的结果(关键字)

问题描述

让我快速解释一下我想做什么!我想通过 PHP 术语从我的数据库中显示类似的行。我有一个名为“游戏”的表格和一个名为“标题”的列,标题看起来像“Rockstar - GTA V”。所以我想删除破折号后的所有单词并使用新字符串作为关键字在数据库中搜索。

我的 CMS 使用此代码在循环内显示帖子标题:

$_smarty_tpl->tpl_vars['game']->value['title']

我刚刚找到了将“Rockstar - GTA V”转换为“Rockstar”的代码:

 <?php $mygame = strstr($_smarty_tpl->tpl_vars['game']->value['title'], '-', true); echo($mygame); ?>

当我将此代码放入“单个模板文件”时,它可以正常工作并根据需要修剪标题,并且在每个游戏的单页中都可以正常工作。

所以我想在单页中创建一个部分来显示该公司制作的所有游戏(我的意思是从标题中删除的单词)。我尝试了一些代码,但没有!这是我尝试过的:

<?php
$connect = mysqli_connect("localhost", "dbname", "dbpass", "dbuser");
$connect->set_charset('utf8mb4');
mysqli_set_charset($link, 'utf8mb4');

$gamecompany = strstr($_smarty_tpl->tpl_vars['game']->value['title'], '-', true);

$query = 'SELECT * FROM games WHERE title = "'.$gamecompany.'" ORDER BY game_id ASC LIMIT 50';
    
$result = mysqli_query($connect, $query);
if(mysqli_num_rows($result) > 0)
{
    $output .= '<div class="list">';
    
    while($row = mysqli_fetch_array($result))
    {
        $output .= '<li class="game"><a href="https://example.com/'.$row["game_id"].'/" target="_blank">'.$row["title"].'</a></li>';
    }
    $output .= '</div>';
    echo $output;
}
else
{
    echo 'Nothing Found';
}
?>

所以我曾经$gamecompany修剪并获得游戏的公司并将其用作查询中的关键字。但每次它只显示“ Nothing Found ”。当我的数据库中有一些带有关键字“Rockstar”的游戏时,它不会显示它,只是通过条件语句并且什么也不能显示。尝试了另一个关键字(直接在我的代码中)但不起作用!

请注意:我的标题是“阿拉伯语”语言,应该是UTF8。这是我的问题吗?或者只是一个错误的编码?

标签: phpmysqli

解决方案


使用 LIKE,您可以找到所有出现的“Rockstar”,但为了安全起见,请将其转换为小写并删除可能出现的任何多余空格。此外,让我们使用准备好的语句保护自己免受 SQL 攻击。

$gamecompany = strtolower(trim(strstr($_smarty_tpl->tpl_vars['game']->value['title'], '-', true))); // put it in lower case, trim any excess white space

$query = 'SELECT * FROM games WHERE LOWER(title) LIKE ? ORDER BY game_id ASC LIMIT 50';
$stmt = $conn->prepare($query);
$value = "%$gamecompany%"; // The % allows us to find any titles that have our search string in them
$stmt->bind_param("s", $value);
$stmt->execute();
$result = $stmt->get_result(); 

推荐阅读