【问题标题】:search keywords from textbox to mysql从文本框搜索关键字到mysql
【发布时间】:2012-10-06 13:14:00
【问题描述】:

我将用户的输入分解为数组,然后在数据库中搜索它们,但如果用户输入空格作为结果,它将显示有空间的表的整行我怎样才能使它正确?

if(isset($_POST['submit'])){
$keywords = explode(" ", $_POST["search"]);
for ($i=0; $i<count($keywords); $i++) {

$query = "SELECT * FROM mp3s " .
"WHERE (artist LIKE '%".$keywords[$i]."%' 
OR   genre LIKE '%".$keywords[$i]."%'  
OR  album LIKE '%".$keywords[$i]."%'
OR  filename LIKE '%".$keywords[$i]."%'
) ";
$sql = mysql_query($query) or die(mysql_error());

}

【问题讨论】:

  • 使用 trim() 删除空格...当心 SQl 注入
  • mysql_real_escape_string()。或者,使用 PDO。
  • 如果我使用 trim 可以把它们做成一个数组吗?

标签: php mysql string search keyword


【解决方案1】:

使用trim()删除空格,使用mysql_real_escape_string()防止sql注入。

 if(isset($_POST['submit'])){
    $keywords = explode(" ", trim($_POST["search"]));
    for ($i=0; $i<count($keywords); $i++) {

    if(!empty($keywords[$i])) {

      $query = "SELECT * FROM mp3s " .
      "WHERE (artist LIKE '%".trim(mysql_real_escape_string($keywords[$i]))."%' 
      OR   genre LIKE '%".trim(mysql_real_escape_string($keywords[$i]))."%'  
      OR  album LIKE '%".trim(mysql_real_escape_string($keywords[$i]))."%'
      OR  filename LIKE '%".trim(mysql_real_escape_string($keywords[$i]))."%'
      ) ";
      $sql = mysql_query($query) or die(mysql_error());

    }

    }

但是使用MySQLi 比使用mysql_real_escape_string() 函数更好。
http://php.net/manual/en/function.mysql-real-escape-string.php

或带有准备好的语句的 PDO:
http://php.net/manual/en/pdo.prepared-statements.php

【讨论】:

    【解决方案2】:

    几点: 1.而不是使用 for ,使用 foreach - 它对数组很有用(就像你的情况一样)

    1. 在执行查询之前检查用户的查询,要求用户输入超过 2 个字符的关键字(使用“strlen”)并不可耻。

    3.使用PDO

    4.阅读更多关于trim函数的信息

    if(isset($_POST['submit'])){
    $search_string = trim($_POST['search']);
    if(strlen($search_string) == 0)
    {
    //The user is looking for empty string...
    //Amm...why is he doing it?
    exit();
    }
    
    $keywords = explode(" ", $_POST["search"]);
    foreach($keywords as $keyword)
    {
    $keyword = trim($keyword);
    $stmt = $dbh->prepare("SELECT * FROM mp3s WHERE (artist LIKE ? 
    OR   genre LIKE ? OR  album LIKE ? OR  filename LIKE ?)");
    
    $stmt->execute(array("%$keyword%","%$keyword%","%$keyword%","%$keyword%"));
    
    }
    

    【讨论】:

      猜你喜欢
      • 2018-05-03
      • 2010-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-05
      • 1970-01-01
      • 2011-10-27
      相关资源
      最近更新 更多