У меня есть скрипт, который должен возвращать значения из таблиц 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>
и 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;
}
}
?>
В моей базе данных есть две таблицы, но меня интересует только поиск по одной (Apple). Кто-нибудь может мне помочь? Я не могу заставить это работать. Результаты не возвращаются, независимо от того, что я ищу. На данный момент я использую только критерии Last_Name, но я бы хотел добавить другие. Вот ссылка на скриншот моей таблицы http://imgur.com/a/H3DnG.
Буду очень признателен за любые возможные отзывы. Спасибо.
Если вы проверите это снова,
В метод поиска вы проходите $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();
}
Других решений пока нет …