2

这可能以前被问过,请随时链接我或其他什么,我只是找不到我想要的东西。

这很简单,我需要显示搜索表单的结果。那部分很简单,我可以让它工作。我遇到的问题是当没有结果与用户搜索的内容匹配时。

我相当确定我只需要使用一个 IF 语句,但我对 PHP 不是很有经验,并且无法弄清楚如何正确显示代码。

这是我到目前为止所拥有的:

$query = "SELECT * FROM search WHERE isbn='$isbn' OR bookname='$bookname' OR author='$author' OR category='$category'";

if (!$query)
{
    echo "No results found in the database. Please go back and search again.";
}

我的问题是:当用户搜索与数据库中的任何内容都不匹配时,如何显示“未找到结果...”消息?

注意- 在尝试理解 PHP 和 SQL 中的某些术语时,我很快就会感到非常困惑,所以请尝试像向绝对初学者一样解释你的答案。

提前谢谢了。

4

2 回答 2

1

您希望在数据库表中未找到任何行时显示“未找到结果”消息。

为此,您可以使用以下 PHP 和 SQL 代码:

$sql = "SELECT * FROM search WHERE isbn='$isbn' OR bookname='$bookname' OR author='$author' OR category='$category'";
$query = $db->prepare($sql);
$query->execute();
$rows = $query->fetch(PDO::FETCH_NUM);
if($rows[0]) { 
    // Row exists
} else {
    echo "No results found in the database. Please go back and search again.";
}

请注意,上述答案容易受到 SQL 注入攻击。为防止 SQL 注入攻击,建议您准备并绑定所有用户提交的数据,这里有一个更好的示例来展示如何防止 SQL 注入攻击:(完整示例,包括数据库连接)

$db = new PDO($dsn);
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$query = $db->prepare("SELECT * FROM search WHERE isbn=:isbn OR bookname=:bookname OR author=:author OR category=:category");
$query->execute([ ':isbn'=>$isbn, ':bookname'=>$bookname, ':author'=>$author, ':category'=>$category ]);
$rows = $query->fetch(PDO::FETCH_NUM);
if($rows[0]) { 
    // Row exists
} else {
    echo "No results found in the database. Please go back and search again.";
}
于 2015-10-04T12:41:13.133 回答
0

假设您使用的是Mysqli

  //connect with mysql
    $conn = mysqli_connect("localhost", "user", "password", "db");
   //here is the query
    if($result = mysqli_query($conn,"SELECT * FROM search WHERE isbn='$isbn' OR bookname='$bookname' OR author='$author' OR category='$category'")){
       if(mysqli_num_rows($result) > 0){
          //mysqli_num_rows() returns the number of rows in a result . 
          //when it is greater than zero, it has some results 
       }
       else{
         echo "No results found in the database. Please go back and search again.";
         //Do something if no results returned
       }
    }
    //finally free the results
    mysqli_free_result($result);
mysqli_close($conn);
于 2015-10-04T11:57:22.497 回答