0

検索入力に基づいて mysql テーブルから値を返すスクリプトがあります。このスクリプトは 2 つのファイルで構成されています。

検索.php

<?php
if ( isset( $_GET['s'])) {
require_once( dirname( __FILE__ ) . '/class-search.php' );
$search = new search();
$search_term = $GET['s'];
$search_results = $search->search($search_term);
}
?>
<!DOCTYPE html>
<html>
<head>
    <title>Search</title>
</head>
<body>
    <h1>Search</h1>
    <div class="search-form">
        <form action="" method="get">
            <div class="form-field">
                <label for="search-field">Search</label>
                <input type="search" name="s" placeholder="Search by name" results="5" value="<?php echo $search_term; ?>">
                <input type="submit" value="Search">
            </div>
        </form>
    </div>
    <?php if ( $search_results ) : ?>
    <div class="results-count">
        <p><?php echo $search_results['count']; ?> results found</p>
    </div>
    <div class="results-table">
        <?php foreach ( $search_results['results'] as $search_result ) : ?>
        <div class="result">
            <p><?php echo $search_result->title; ?></p>
        </div>
        <?php endforeach; ?>
    </div>
    <div class="search-raw">
        <pre><?php print_r($search_results); ?></pre>
    </div>
    <?php endif; ?>
</body>

およびclass-search.php

<?php
class search {

private $mysqli;
public function __construct() {
    $this->connect();
}
private function connect() {
    $this->mysqli = new mysqli('HOST', 'USERNAME', 'PASSWORD', 'DATABASE' );
}
public function search($search_term) {
    $sanitized = $this->mysqli->query("
    SELECT * FROM `Apple`
    FROM search
    WHERE Last_Name LIKE '%{$sanitized}%'
    ");
    if ( ! $query->num_rows ) {
        return false;
    }
    while( $row = $query->fetch_object() ) {
        $rows[] = $row;
    }
    $search_results = array(
    'count' => $query->num_rows,
    'results' => $rows,
    );
    return $search_results;
}
}
?>

データベース内に 2 つのテーブルがありますが、1 つのコンテンツ (Apple) の検索のみに関心があります。誰か助けてくれませんか?私はこれを機能させることができないようです。何を検索しても結果が返されません。今のところ、Last_Name 基準のみを使用していますが、他の基準を追加したいと考えています。私のテーブルhttp://imgur.com/a/H3DnGのスクリーンショットへのリンクです。

可能な限りフィードバックをいただければ幸いです。ありがとうございました。

4

1 に答える 1

1

改めて確認すると、

検索メソッドでは$search_term引数として渡していますが、使用$sanitizedしているクエリでは、クエリが実行されるまで存在しません。

結果セットは$sanitizedにありますが、存在しないnum_rowsの$queryをチェックしています。また、そのメソッドに戻っているため、実際の問題を特定できません。false

public function search($search_term) {
    $sanitized = $this->mysqli->query("
    SELECT * FROM `Apple`
    FROM search
    WHERE Last_Name LIKE '%{$search_term}%'
    ");
    if ( ! $sanitized->num_rows ) {
        //return false;
        retrun [];
    }
    $rows  = [];
    while( $row = $sanitized->fetch_object() ) {
        $rows[] = $row;
    }
    $search_results = array(
    'count' => $query->num_rows,
    'results' => $rows,
    );
    return $search_results;
}

connect メソッドで、これを追加して、データベースに接続されているかどうかを通知します。

if ($this->mysqli->connect_errno) {
    printf("Connect failed: %s\n", $this->mysqli->connect_error);
    exit();
}
于 2016-11-06T08:10:58.437 に答える