【问题标题】:PHP basic search engine [closed]PHP基本搜索引擎[关闭]
【发布时间】:2016-03-19 03:47:19
【问题描述】:

我的搜索引擎不工作,我希望引擎从 mySQL 数据库中获取数据并将它们显示在表格中,这是我的 PHP 代码..

谢谢!

PHP 代码:

<?php

    <?php

$connect = new mysqli('localhost', 'root', '', 'supermazad') or die(mysql_error());
$connect->select_db('supermazad');

//collect

if(isset($_POST['search'])){
    $searchq = $_POST['search'];
    $searchq = preg_replace("#[^0-9a-z]#i", "", $searchq);

    $query = mysqli_query("SELECT * FROM main WHERE title LIKE '%$searchq%'") or die(mysql_error());
    $count = mysql_num_rows($query) or die(mysql_error());

    if($count == 0){
        $output = 'There was no search results.';
    }
    else{
            while($row = mysql_fetch_array($query)){
                $id = $row['ref'];
                $title = $row['title'];
                $desc = $row['description'];

                    foreach( $id && $title && $desc ){
                        $output = '<table class="results-tab"><tr></tr><tr><td>'. $id .'</td>'. '<td>' . $title . '</td>' .'<td>'. $desc . '</td></tr>'; 
                    }
            }
    }
}
?>

【问题讨论】:

  • “不起作用”是什么意思?它有什么作用?它应该做什么?
  • 您使用的是mysqli_query,然后是mysql_num_rows ...?这有什么意义?顺便说一句:使用准备好的语句或 PDO
  • 嘿@jsfan .. 它的意思是从数据库中搜索并在表格中显示数据。
  • 嘿@StevenDropper ..我是PHP和MySQL的新手,这就是为什么我会犯这样的错误,你能解释一下吗?
  • mysqli_query 需要两个参数。使用mysqli_num_rowsmysqli_errormysqli_

标签: php html mysql css mysqli


【解决方案1】:

**注意-这是基于您所说的简单示例**

  1. 你正在混合 mysqli + mysql
  2. 问题与您的查询有关。你需要从你想要的表中索引你的字段。

你需要做什么?

  • ALTER TABLE main ADD INDEX title (product_id);
  • SELECT * FROM main WHERE title LIKE '%".$searchq."%' OR MATCH(field_1, field_2, field_3, field_4) AGAINST('".$searchq."');

第二个查询是使用全文(https://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html)的例子

修改代码:

<?php
        // data
        $localhost   = 'localhost'; 
        $username    = 'username';
        $password    = 'passw0rd';
        $database    = 'supermazad';

        mysql_connect($localhost,$username,$password) or die(mysql_error());
        mysql_select_db($database) or die(mysql_error());

        if(isset($_POST['search'])){
            $searchq = $_POST['search'];
            $searchq = preg_replace("#[^0-9a-z]#i", "", $searchq);

            $query = mysql_query("SELECT * FROM main WHERE title LIKE '%$searchq%'") or die(mysql_error());
            $count = mysql_num_rows($query) or die(mysql_error());

            if($count == 0){
                $output = 'There was no search results.';
            }else{
                echo '<table class="results-tab">';
                while ($row = mysql_fetch_array($query, MYSQL_ASSOC)) {
                   echo '<tr>
                            <td>'.$row["ref"].'</td>
                            <td>'.$row["title"].'</td>
                            <td>'.$row["description"].'</td>
                        </tr>';
                }
                echo '</table>';    
            }
        }
    ?>

【讨论】:

  • 你好@CristianoPerdigão 非常感谢,做了一些调整!
  • 欢迎您@KhalidAlmaki :)。祝你的目标好运!
【解决方案2】:

使用准备好的语句,这样更安全,因为它们可以防止SQL injection

我几乎对每个步骤都进行了评论,以便您学习准备好的语句。

<?php

$mysqli = new mysqli('localhost', 'root', '', 'supermazad') or die(mysql_error());

if(isset($_POST['search'])){
    $searchq = "%{$_POST[search]}%";
    $searchqrep = preg_replace("#[^0-9a-z]#i", "", $searchq);

    $stmt = $mysqli->prepare("SELECT * FROM main WHERE title LIKE ?");
    $stmt->bind_param('s',$searchqrep); //bind parameters to your statement
    $stmt->execute(); //you must execute your statement otherwise no results
    $stmt->bind_result(); //bind results to variables, but you must define them after the "Select ... " SQL
    $stmt->store_result(); //store results in case of further usage of them
    while($stmt->fetch()){ // the while loop will pull out all existing results from your table
        if($stmt->num_rows == 0){
            echo "No search results";   
        }else{
            // Echo/Print the binded variables from statement   
        }
    }
    $stmt->close(); //Still close your prepared statements
}
?>

【讨论】:

  • 嘿@StevenDropper,我找到了一本关于高级PHP的书,我去看看,你有什么好书推荐吗?
  • @KhalidAlmalki - 如果你想编码,你需要完全理解 php 代表什么以及你可以用它做什么。基本上都读完了……
猜你喜欢
  • 1970-01-01
  • 2013-09-24
  • 2010-11-29
  • 1970-01-01
  • 2020-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多