【发布时间】:2014-09-23 18:29:36
【问题描述】:
我正在尝试使用 php 和 MySQL 执行搜索功能。我需要从两个不同的列中搜索,一列用于歌曲标题,另一列用于艺术家,用户可以使用以下方式进行搜索:
1. artist name.
2. song title.
3. both of them (without order)
4. there will be special characters for ex: ' (apostrophe)
这就是我所做的,但我需要一种更有效的方法来做到这一点。我也想过在 php 中使用similar_text();。谁能建议我一个更好的方法来做到这一点。谢谢你
表:songs
|artist | title |
|----------------------|
|eminem | not afraid |
|kida | o'najr |
我的代码:
$search_value = $_POST["search_value"];
$query = "select * from `songs` where concat(`title`, `artist`) like '%$search_value%'";
【问题讨论】:
-
有什么东西不能用吗?您是否遇到任何您没有预料到的错误?
-
这看起来非常不安全。你确定你的用户参数是properly escaped吗?
$_POST数据 NEVER 直接进入查询。如果不以某种形式转义,这是行不通的。 -
它有效,但你知道......这不是一个很好的解决方案。也为前。它不应该与字符串的一部分一起使用。例如。如果你搜索:raid 它会显示 Eminem - Not Afraid 结果。这不应该发生。
-
它显示 eminem 因为你可能是印刷艺术家。尝试打印标题!
-
@rexhin - 为什么不应该显示?如果您不想搜索歌曲标题,请删除该部分查询。它是代码,不是魔法。