显示来自sql查询的多个结果

显示来自sql查询的多个结果

问题描述:

所以我试图从查询被搜索时从数据库显示多个结果,查询从另一页上的搜索框传递。显示来自sql查询的多个结果

我有它显示一个结果,但这就是它会显示。 我需要它来显示所有与搜索查询相关的结果。

PHP代码低于

<meta charset="UTF-8"> 
<?php 
    $mysqli = new mysqli('localhost', 'scott', 'tiger','courses'); 
    if ($mysqli->connect_errno) 
    { 
     die('Database connection failed'); 
    } 
    //$m->set_charset('utf8'); 
    $search_sql = " 
    SELECT title, summary, id 
    FROM course 
    WHERE title LIKE '%".$_POST['searchBar']."%'"; 
    $result = $mysqli->query($search_sql) or die($mysqli->error); 
    $search_result = $result->fetch_assoc(); 
?> 
<!doctype html> 
<head> 
    <meta charset="utf-8"> 
    <h1>Search Results</h1> 
</head> 
<body> 
    <h3><?= $search_result['title'] ?></h1> 
    <p><?= $search_result['summary'] ?></p> 
</body> 

和搜索栏

<!doctype html> 
<html> 
<Head> 
    <meta charset = "utf-8"> 
    <title>Search</title> 
</head> 
<body> 
    <h2>Search</h2> 
    <form name="search" method="post" action="SearchResultsPage.php"> 
     <input name="searchBar" type="text" size="40" maxlength="60" /> 
     <input type="submit" name="Submitsearch" value="Search" /> 
    </form> 
    </body> 

有没有人有任何建议的代码?

在此先感谢;

+0

您只需要显示一条记录或完美的搜索值结果? – RJParikh

+0

你必须遍历结果集。请参阅[关于fetch_assoc()]的PHP手册页上的示例#1(http://php.net/manual/en/mysqli-result.fetch-assoc.php)。另外,请阅读“准备好的陈述”。 –

+0

只需阅读[documentation]上的示例(http://php.net/manual/en/mysqli-result.fetch-assoc.php)。 –

你需要把它放在一个while循环中以显示多个结果,你使用的fetch函数只会检索一行,如果你把它放在一个循环中,你可以继续读取,直到没有东西可以读取:

//$m->set_charset('utf8'); 
$search_sql = " 
SELECT title, summary, id 
FROM course 
WHERE title LIKE '%".$_POST['searchBar']."%'"; 
$result = $mysqli->query($search_sql) or die($mysqli->error); 
?> 
<!doctype html> 
<head> 
    <meta charset="utf-8"> 
    <h1>Search Results</h1> 
</head> 
<body> 
    <?PHP while($search_result = $result->fetch_assoc()) { ?> 
    <h3><?= $search_result['title'] ?></h1> 
    <p><?= $search_result['summary'] ?></p> 
    <?PHP } ?> 
</body> 

PS你的代码容易受到SQL注入的攻击,你应该阅读一下准备好的语句More Info on that

+0

这正是我所期待的,我也会看看准备好的陈述,谢谢! – bdg

+0

没问题,乐于帮忙。如果您对此有任何疑问,请不要犹豫,如果不是,请不要忘记接受答案,以免它保持开放状态:)准备好的陈述起初似乎令人望而生畏,但并没有那么糟糕,从SQL注入中获得安全保障^^您的项目祝您好运! – Jester

+0

没问题我会如果我遇到任何我不确定的事情,再次感谢 – bdg

你可以用while循环迭代你的查询结果。为了完成这个例子,我添加了必要的数据清理。

<?php 

// function to clean post data 
function cleanPost(&$value) { 

    if (is_array($value)) { 
     foreach ($value as $k => $v) { 
      $value[$k] = cleanPost($v);    
     } 
     return $value; 
    } 
    else { 
     $value = mysql_real_escape_string($value); 
     return trim(htmlentities(strip_tags($value))); 
    } 
} 

// search function 
function search() { 

    // check if post data is set 
    if (isset($_POST['searchBar'])) { 

     // make link with db 
     $link = mysqli_connect('localhost', 'scott', 'tiger','courses'); 
     if (!$link)   
      return false; 
     } 

     // clean your post data 
     $cleanPostData = cleanPost($_POST); 

     // query 
     $sql = "SELECT title, summary, id FROM course WHERE title LIKE '%".$cleanPostData['searchBar']."%'"; 
     $result = mysqli_query($link, $sql); 

     // iterate over results 
     if (isset($result) && mysql_num_rows($result) > 0) { 
      while ($row = mysql_fetch_assoc($result)) { 
       // here is your data 
       echo $row['title'] . "< br/>"; 
       echo $row['summary'] . "< br/>"; 
       echo $row['id'] . "< br/>"; 
      } 
     }  
    } 
} 

// call search function 
search(); 

?> 
+0

如果我可能问,你是否倒下了我?如果是这样,请注意解释一下?如果不是从来没有想过 – Jester

+0

也混合mysql和mysqli函数,那会产生问题。 – Jester