繁体   English   中英

如何从MySql中检索信息而忽略特殊字符?

[英]How do I retreive information from MySql ignoring special characters?

我有以下简单的搜索查询代码:

function explode_search($squery, $column, $db, $link) {
global $conn;

$ven = explode(' ', safeInput(str_replace(',', '', $squery)));
$ven2 = array_map('trim', $ven);
$qy = ''.$column.' LIKE "%'.implode('%" AND '.$column.' LIKE "%', $ven2).'%"';

$query = 'SELECT DISTINCT '.$column.', id, work_composer FROM '.$db.' WHERE '.$qy.' ORDER BY '.$column.' LIMIT 100';
$result = mysqli_query($conn, $query);
while ($row = mysqli_fetch_assoc($result))  {

    echo '<div><span class="mdmtxt" style="margin-bottom:5px;"><a href="'.$link.'.php?id='.$row['id'].'">'.$row[$column].'</a></span> <span class="mdmtxt" style="opacity:0.6;">('.fixcomp(cfid($row['work_composer'], 'cffor_composer', 'composer_name')).')</span></div>';
}   
}

(safeInput函数消除了“和”以及其他可能的问题)

它可以正常工作。

当有人寻找“斯蒂芬妮”时,我也希望他们也找到“斯蒂芬妮”(反之亦然),或者如果他们正在寻找“慕尼黑”,则“慕尼黑”也应出现在列表中。

有没有办法使MySQL匹配那些搜索查询,而与所涉及的特殊字符无关?

您想使用所谓的“参数化查询”。 大多数语言都有它们,它们被用来保护输入并防止受到攻击。

在您习惯了它们之后,它们也非常容易使用。

您从这样的简单查询开始

$stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")

然后将所有实际数据替换为? 秒。

然后,您绑定每个参数。

$stmt->bind_param("s", $city);

然后调用$stmt->execute();

可以在这里找到更多信息: http : //php.net/manual/en/mysqli.prepare.php

在大学上一次,我们的教授让我们使用了没有参数化查询的库,所以我自己编写了一个实现。 学说非常棒,可以为您处理所有这一切。 我总是依靠别人为我做这些事情,而不是编写自己的实现。 这样您会遇到麻烦。 关于不重新发明新类型的文章也很多,这基本上就是您正在做的事情。 类型有问题。 类型需要测试。 这种事情在其他实现中经过了很好的测试,而不是您的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM