2016-11-06 122 views
0

我有一個腳本,應該從基於搜索輸入的mysql表返回值。該腳本由兩個文件組成。PHP腳本來搜索MySQL數據庫

的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; 
} 
} 
?> 

在我的數據庫中,我有兩個表,但我只對搜索的內容感興趣一個蘋果)。有人能幫助我嗎?我似乎無法完成這項工作。無論我搜索什麼,都不會返回結果。截至目前,我只使用Last_Name標準,但我想添加其他人。這是我的表http://imgur.com/a/H3DnG的屏幕截圖的鏈接。

我真的很感激任何反饋可能。謝謝。

+0

WHERE Last_Name LIKE'%{$ sanitized}%'或First_Name LIKE'%{$ sanitized}%'或... - 但這不是正確的方法。你應該使用這個: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; 
} 

連接方法,添加此它會告訴它是否得到連接到數據庫或沒有。

if ($this->mysqli->connect_errno) { 
    printf("Connect failed: %s\n", $this->mysqli->connect_error); 
    exit(); 
} 
+0

謝謝。我已經做出了改變,但仍然有同樣的結果。我的直覺是我沒有正確連接mysql。 –

+0

@TjKeel你有什麼錯誤?此外,我仔細查看了'search'方法有很多問題後,我更新了回答 – harigorana

+0

@TjKeel。檢查更新的答案 – harigorana