【问题标题】:Simple php/sql search engine简单的 php/sql 搜索引擎
【发布时间】:2024-01-10 22:54:01
【问题描述】:

我正在尝试制作一个简单的 php、sql 搜索引擎,它将从我的数据库中选择“喜欢”关键字(查询)的所有内容并显示它。但是它不会起作用。它只显示文本“问题”(见第 32 行),经过数小时的故障排除后,我仍然无法弄清楚这一点。

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Search Engine Test</title>
</head>
<body>
<script language="php">
// Create a database connection
$connection = mysql_connect("*****","*****","*****");   
if (!connection) {
    die ("Please reload page. Database connection failed: " . mysql_error());
}

// Select a databse to use
$db_select = mysql_select_db("*****",$connection);
if (!$db_select) {
    die("Please reload page. Database selection failed: " . mysql_error());
}

// Search Engine
// Only execute when button is pressed
if (isset($_POST['search'])) {
// Filter
//$keyword = trim ($keyword);
echo $keyword;
// Select statement
$search = mysql_query("SELECT * FROM tbl_name WHERE cause_name LIKE '%keyword%'");
// Display
$result = @mysql_query($search);
if (!$result){
echo "problem";
exit();
}


while($result = mysql_fetch_array( $search )) 
 { 
 echo $result['cause_name']; 
 echo " ";
 echo "<br>"; 
 echo "<br>"; 
 }
 $anymatches=mysql_num_rows($search); 
 if ($anymatches == 0) 
 { 
 echo "Nothing was found that matched your query.<br><br>"; 
 }
}
</script>
<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
<input type="text" name="keyword">
<input type="submit" name="search" value="Search">

</body>
</html>

【问题讨论】:

    标签: php sql search search-engine


    【解决方案1】:

    尝试并改变:

    if (isset($_POST['search'])) { //$_POST['search'] just tells that there are a submit-button when submitting (and the name of it)
    // Filter
    //$keyword = trim ($keyword);
    echo $keyword; //You're echoing out value of $keyword which hasn't been set/assigned
    // Select statement
    
    //You're always searching for the word keyword with leading and/or trailing characters
    //You're not searching for a dynamically assigned value which I think is what you want
    $search = mysql_query("SELECT * FROM tbl_name WHERE cause_name LIKE '%keyword%'");
    
    //You're executing an already defined query (assigned in $search)
    $result = @mysql_query($search); //You're suppressing errors, it's bad practice.
    if (!$result){
    echo "problem";
    exit();
    }
    

    到:

    if (isset($_POST['keyword'])) {
    // Filter
    $keyword = trim ($_POST['keyword']);
    
    // Select statement
    $search = "SELECT * FROM tbl_name WHERE cause_name LIKE '%$keyword%'";
    // Display
    $result = mysql_query($search) or die('query did not work');
    

    重要! &lt;script language="php"&gt; 无效。您应该在 php-code 的开头输入 &lt;?php 并在 php-code 结束时输入 ?&gt;

    更新: 您还必须更改此代码:

    while($result = mysql_fetch_array( $search )) 
        { 
        echo $result['cause_name']; 
        echo " ";
        echo "<br>"; 
        echo "<br>"; 
     }
     $anymatches=mysql_num_rows($search); 
     if ($anymatches == 0) 
     { 
         echo "Nothing was found that matched your query.<br><br>"; 
     }
    }
    

    收件人:

    while($result_arr = mysql_fetch_array( $result )) 
    { 
    echo $result_arr['cause_name']; 
    echo " ";
    echo "<br>"; 
    echo "<br>"; 
    }
    $anymatches=mysql_num_rows($result); 
    if ($anymatches == 0) 
    { 
       echo "Nothing was found that matched your query.<br><br>"; 
    }
    }
    

    在编写新代码时,您真的不应该使用 mysql_ 函数*,因为它们已被弃用。请改用 PDO 或 mysqli。

    【讨论】:

    • 当我改变你的建议时,它仍然没有工作,只是输出了“没有找到与你的查询匹配”的消息:(。另外,PHP 错误消息说“提供的参数是不是有效的 MySQL 结果资源”出现在第 33 行和第 40 行。这些行是您建议的更改之后的内容。第 33 行是“while($result = mysql_fetch_array( $search ))”,第 40 行是“$anymatches=mysql_num_rows( $search);" 可能只是想尝试重写搜索代码。
    • 注意:当我登录 phpMyAdmin 并在我的数据库上运行我的 SQL 查询以选择原因名称与关键字类似的所有内容(我只需输入关键字)时,它就可以工作。所以我知道问题不在于数据库不工作或我的表中没有数据。
    • @user26243491 - 这是因为 $search 只是一个包含 sql 语句的字符串,而不是查询的实际结果。我已经更新了我的答案,所以你看看你必须做什么才能让它发挥作用。
    【解决方案2】:

    扩展你的代码,我们可以看到:

    $result = @mysql_query($search);
    

    变成:

    $result = @mysql_query(mysql_query("SELECT * FROM tbl_name WHERE cause_name LIKE '%keyword%'"));
    

    这没有多大意义。

    将第一行改为:

    $search = "SELECT * FROM tbl_name WHERE cause_name LIKE '%keyword%'"
    

    或者,根本不给$search赋值,直接跳到给$result赋值$search当前的值。

    编辑:帮助您解释:

    改变这个:

    $search = mysql_query("SELECT * FROM tbl_name WHERE cause_name LIKE '%keyword%'");
    // Display
    $result = @mysql_query($search);
    if (!$result){
        echo "problem";
        exit();
    }
    

    到这里:

    $result = mysql_query("SELECT * FROM tbl_name WHERE cause_name LIKE '%keyword%'");
    // Display
    if (!$result){
        echo "problem";
        exit();
    }
    

    【讨论】:

    • 我不完全明白你在说什么(我对此很陌生),因为这仍然行不通。谢谢你的回答。
    • 人们通常会创建 SQL(即SELECT * FROM tbl_name WHERE cause_name LIKE '%keyword%')并将其分配给像$search 这样的变量。然后,他们创建另一个变量,例如$result,并为其分配值mysql_query($result)。在您的情况下,您将一个 mysql_query() 函数与另一个 mysql_query() 函数放在一起,这是不正确的。
    • 对,但是在完全取出 $search 变量并重新标记表单后它仍然不起作用:(谢谢