Mysql准备好的语句LIKE问题

Posted

技术标签:

【中文标题】Mysql准备好的语句LIKE问题【英文标题】:Mysql prepared statement LIKE issue 【发布时间】:2019-07-02 07:08:14 【问题描述】:

我正在尝试制作一个实时搜索表单,每当用户键入一个字母时,就会调用一个 ajax 函数并在数据库中搜索结果 Ajax 被成功调用,但我唯一的问题是我的查询就像 WHERE col = value not LIKE 一样,我必须输入 col 全名才能得到结果,否则我没有得到任何结果。 这是我的php代码:

if (isset($_POST['search'])) 
$tagname = $_POST['search'];
$mysqli->set_charset('utf8');
$stmt = $mysqli->prepare("SELECT *,(SELECT COUNT(tagid) FROM sectags WHERE sectags.tagid = tags.tagid) FROM tags WHERE tag LIKE ?");
$stmt->bind_param('s', $tagname);
$stmt->execute();    // Execute the prepared query.
$stmt->store_result();
$stmt->bind_result($id, $tag, $imghref, $tagcount);
echo '<ul>';


while ($stmt->fetch()) 
    ?>
    <!-- Creating unordered list items.
         Calling javascript function named as "fill" found in "script.js" file.
         By passing fetched result as parameter. -->
    <li onclick='fill("<?php echo $tag ?>")'>
        <a>
            <!-- Assigning searched result in "Search box" in "search.php" file. -->
            <?php echo $tag; ?>
    </li></a>
    <?php

?>
</ul>
<?php

稍后将使用从数据库中选择的其他参数。 谢谢。

【问题讨论】:

【参考方案1】:

您需要在绑定到参数的值中包含通配符,以使LIKE 正常工作,例如

$tagname = '%' . $_POST['search'] . '%';

【讨论】:

以上是关于Mysql准备好的语句LIKE问题的主要内容,如果未能解决你的问题,请参考以下文章

准备好的 SQL LIKE 语句不返回所有结果

如何在mysqli准备好的语句中使用SQL LIKE子句[重复]

Golang 中的跨数据库准备好的语句绑定(like 和 where in)

PHP PDO 准备语句——MySQL LIKE 查询

MySql“视图”、“准备好的语句”和“准备好的语句需要重新准备”

从准备好的语句中获取数据