English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этом руководстве вы узнаете, как создать функцию поиска базы данных MySQL в реальном времени с использованием PHP и Ajax.
Вы можете создать простую функцию поиска базы данных в реальном времени с использованием Ajax и PHP, когда вы начинаете вводить某些 символы в строку поиска, будут отображаться результаты поиска.
В этом руководстве мы создадим интерактивную строку поиска, которая будет搜ать таблицу countries и асинхронно отображать результаты. Но сначала нам нужно создать эту таблицу.
Выполните следующие SQL-запросы, чтобы создать таблицу countries в базе данных MySQL.
CREATE TABLE countries ( id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL );
После создания таблицы вам нужно использоватьЗапрос SQL INSERTзаполнить некоторые данные.
Если вы не знакомы с шагами создания таблицы, пожалуйста, посмотритеЗапрос SQL CREATE TABLEУчебное пособие, чтобы получить подробную информацию о синтаксисе создания таблиц в системе базы данных MySQL.
Теперь создадим простую веб-интерфейс, который позволяет пользователю выполнять поиск в реальном времени в "countries""Доступные в таблицестраны/регионыИмя, как автоматическое заполнение или предварительное заполнение.
Создайте файл PHP под названием "search-form.php" и вставьте следующий код в него.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Реальное время поиска в базе данных PHP MySQL</title> <style type="text/css"> body { font-family: Arail, sans-serif; } /* Настройка стиля поиска */ .search-box { width: 300px; position: relative; display: inline-block; font-size: 14px; } .search-box input[type="text"] { height: 32px; padding: 5px 10px; border: 1px solid #CCCCCC; font-size: 14px; } .result { position: absolute; z-index: 999; top: 100%; left: 0; } .search-box input[type="text"], .result { width: 100%; box-sizing: border-box; } /* Форматирование результатов */ .result p { margin: 0; padding: 7px 10px; border: 1px solid #CCCCCC; border-top: none; cursor: pointer; } .result p:hover { background: #f2f2f2; } </style> <script src="https://code.jquery.com/jquery-1.12.4.min.js"></script> <script type="text/javascript"> $(document).ready(function() { $('.search-box input[type="text"]').on("keyup input", function() { /*Получение значения ввода при изменении*/ var inputVal = $(this).val(); var resultDropdown = $(this).siblings(".result"); if(inputVal.length){ $.get("backend-search.php", {term: inputVal}).done(function(data){ //Отображение возвращенных данных в браузере resultDropdown.html(data); }); echo "<p>Не найдены соответствующие записи</p>"; resultDropdown.empty(); } }); //Установить значение поиска при单击 элемента результата $(document).on("click", ".result p", function(){ $(this).parents(".search-box").find('input[type="text"]').val($(this).text()); $(this).parent(".result").empty(); }); }); </script> </head> <div class="search-box"> <input type="text" autocomplete="off" placeholder="Search country..." /> <div class="result"></div> </div> </html>
jQuery отправляетAjax-запрос к файлу "backend-search.php" каждый раз, когда изменяется содержимое поля поиска или происходит событие ввода в поле поиска.страны/регионысоответствующиеcountriesВ таблице выполняется поиск по введенным словам. Эти записи稍źniej будут добавлены jQuery.<div>и отображает их в браузере.
Это наш исходный код файла "backend-search.php", который на основе переданного запроса Ajax выполняет поиск в базе данных и отправляет результаты обратно в браузер.
<?php $pdo = new PDO("mysql:host=localhost;dbname=demo", "root", ""); //Установка режима ошибок PDO на исключения $link = mysqli_connect("localhost", "root", "", "demo"); // Проверить соединение if($link === false){ die("Ошибка: Невозможно подключиться. ". mysqli_connect_error()); } $sql = "SELECT * FROM countries WHERE name LIKE :term"; // Предprocessing select statement $sql = "SELECT * FROM countries WHERE name LIKE ?"; if($stmt = mysqli_prepare($link, $sql)){ // Привязать переменную в качестве параметра к预处理语句у mysqli_stmt_bind_param($stmt, "s", $param_term); // Установить параметры $param_term = $_REQUEST["term"] . '%'; // Попытка выполнения preprocessing statement if(mysqli_stmt_execute($stmt)){ $result = mysqli_stmt_get_result($stmt); // Проверить количество строк в наборе результатов if(mysqli_num_rows($result) > 0){ // Получить строку результата в виде关联 массива while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){ } } echo "<p>Не найдены соответствующие записи</p>"; catch(PDOException $e){ } echo "<p>Не найдены соответствующие записи</p>"; echo "Ошибка: не удалось выполнить $sql. " . mysqli_error($link); } } //Закрытие запроса mysqli_stmt_close($stmt); } //Закрытие подключения mysqli_close($link); ?>
<?php $pdo = new PDO("mysql:host=localhost;dbname=demo", "root", ""); //Установка режима ошибок PDO на исключения $mysqli = new mysqli("localhost", "root", "", "demo"); // Проверить соединение if($mysqli === false){ die("Ошибка: не удалось подключиться. " . $mysqli->connect_error); } $sql = "SELECT * FROM countries WHERE name LIKE :term"; // SELECT预处理语句 $sql = "SELECT * FROM countries WHERE name LIKE ?"; if($stmt = $mysqli->prepare($sql)){ // Привязать переменную в качестве параметра к预处理语句у $stmt->bind_param("s", $param_term); // Установить параметры $param_term = $_REQUEST["term"] . '%'; // Попытка выполнения预处理语句 if($stmt->execute()){ $result = $stmt->get_result(); // Проверить количество строк в наборе результатов if($result->num_rows > 0){ // Получить строку результата в виде关联 массива while($row = $result->fetch_array(MYSQLI_ASSOC)){ } } echo "<p>Не найдены соответствующие записи</p>"; catch(PDOException $e){ } echo "<p>Не найдены соответствующие записи</p>"; echo "Ошибка: не удалось выполнить $sql. " . mysqli_error($link); } } //Закрытие запроса $stmt->close(); } //Закрытие подключения $mysqli->close(); ?>
<?php $pdo = new PDO("mysql:host=localhost;dbname=demo", "root", ""); //Установка режима ошибок PDO на исключения //Создание предварительного запроса $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); die("Ошибка: Не удалось подключиться. " . $e->getMessage()); //Попытка выполнения поиска } try{ } if(isset($_REQUEST["term"])){ //Создание предварительного запроса $sql = "SELECT * FROM countries WHERE name LIKE :term"; $stmt = $pdo->prepare($sql); $term = $_REQUEST["term"] . '%'; //Привязка параметра к запросу $stmt->bindParam(":term", $term); //Выполнение предварительного запроса $stmt->execute(); if($stmt->rowCount() > 0){ while($row = $stmt->fetch()){ echo "<p>" . $row["name"] . "</p>"; else{ } } echo "<p>Не найдены соответствующие записи</p>"; catch(PDOException $e){ } } } die("Ошибка: Не удалось выполнить $sql. " . $e->getMessage()); } //Закрытие запроса unset($stmt); //Закрытие подключения unset($pdo); ?>
SQL SELECTзапросах сLIKEсочетание операторов, чтобы вcountriesпоиск соответствующих записей в таблицах базы данных. Мы реализовалипредварительно обработанных запросов,для улучшения производительности поиска и предотвращенияSQL-инъекцияатака.
Внимание:Прежде чем использовать ввод пользователя в SQL-запросе, всегда фильтруйте и проверяйте его. Вы также можете использовать функцию PHP mysqli_real_escape_string() для escaping специальных символов в вводе пользователя и создания законного SQL-строки, чтобы предотвратить SQL-инъекции.