2016-11-06 6 views
0

検索入力に基づいてmysqlテーブルから値を返すことになっているスクリプトがあります。このスクリプトは2つのファイルで構成されています。私のデータベース内MySQLデータベースを検索するPHPスクリプト

search.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> 

とクラス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つのテーブルを持っているが、私はのコンテンツを検索する際にのみ興味一つのりんご)。誰かが私を助けることができますか?私はこの仕事をしているようには見えません。私が何を検索しても結果は返されません。現時点ではLast_Name基準のみを使用していますが、他のものを追加したいと思います。ここに私のテーブルhttp://imgur.com/a/H3DnGのスクリーンショットへのリンクがあります。

本当にありがとうございます。ありがとうございました。

+0

WHERE Last_Name LIKE '%{$ sanitized}%OR OR First_Name LIKE'%{$ sanitized}%OR ... - これは正しい方法ではありません。これを使用する必要があります:https://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html – Deep

+0

ありがとうございます。私は問題を修正しましたが、同じ問題が残っています –

+0

(主な問題を「結果は返されません」より顕著に - あなたの投稿の上部近くで言及したいと思うかもしれません。タグが見えてきたときにタイトルが消えてしまうような、質問票の最下部に明示的な(&具体的な)質問があります。時間が許され、熟読する[良い質問をするにはどうすればいいですか?](http://stackoverflow.com/help/how-to-ask)。 – greybeard

答えて

1

あなたは、再びあなたが引数として$search_termを渡しているが、クエリでクエリが実行されるまで存在しません$sanitizedを使用している検索方法で

それを確認してください。

あなたしている結果セットが$消毒であるが、あなたはNUM_ROWSさえ存在しませんため$クエリをチェックしています。また、その方法で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(); 
} 
+0

ありがとうございます。私は変更を加えたが、同じ結果を残している。私の直感は、私はmysqlを正しく接続していないということです。 –

+0

@TjKeel何かエラーがありますか?また、私は答えを更新しました – harigorana

+0

@TjKeel注意深く探した後、 'search'メソッドの問題がたくさんあります。更新された答えを確認してください – harigorana