Правильный запрос в MySQL через PHP

128
21 декабря 2019, 20:50
<?php
    ini_set('display_errors', 1);
    error_reporting(E_ALL);
    include_once ('../function.php');
    $db = new Database;
    class checkSearch    
    {
        public $search;
        function postSearch($serach)
        {
            return $this->search = $_POST['search'];
        }
        function trimSearch($search)
        {
            return $this->search = trim($this->postSearch($search));
        }
        function stripSearch($search)
        {
            return $this->serach = strip_tags($this->trimSearch($search));
        }
    }
    $search = new checkSearch;
    echo '<table>';
    foreach($db->select('offices', '*', '', 'number_office LIKE ' . $search->stripSearch($_POST)) as $values)
    {
        echo '<tr>';
        foreach($values as $key => $value)
        {
            echo '<td class="' . $key . '">' . $value . '</td>';
        }
        echo '</tr>';
    }
    echo '</table>';
?>

Добрый день. В данном запросе к базе данных, хочу реализовать поиск по ключу LIKE и поиску любого значения при помощи аргумента %. Только вот везде в примерах приводят запись вида:

WHERE CustomerName LIKE 'a%'

Как этот аргумент добавить в моём случае?

Answer 1

Хуже класса Database здесь только класс checkSearch.
Оба отправляем на свалку истории, и учимся работать с БД через PDO.

pdo.php берем отсюда, заменив параметры подключения на свои

<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
include_once ('../function.php');
require_once ('../pdo.php');
$search = trim($_POST['search'])."%";
$stmt = $pdo->prepare("SELECT * offices WHERE number_office LIKE ?");
$stmt->execute([$search]);
$data = $stmt->fetchAll();
?>
<table>
<?php foreach($data) as $values): ?>
    <tr>
    <?php foreach($values as $key => $value): ?>
        <td class="<?= htmlspecialchars($key) ?>"><?= htmlspecialchars($value) ?></td>
    <?php endforeach ?>
    </tr>
<?php endforeach ?>
</table>

если интересно почитать про класс Database, вот список граблей, на которые наступают начинающие писатели классов для работы с базой данных. Если плохо с английским, можно использовать https://www.deepl.com/ru/translator

Answer 2

Вышел из положения таким образом:

<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
include_once ('../function.php');
$db = new Database;
class checkSearch
  {
    public $search;
    function postSearch($serach)
      {
        return $this->search = $_POST['search'];
      }
    function trimSearch($search)
      {
        return $this->search = trim($this->postSearch($search) . '%');
      }
    function stripSearch($search)
      {
        return $this->serach = strip_tags($this->trimSearch($search));
      }
  }
$search = new checkSearch;
echo '<table>';
foreach($db->select('offices', '*', '', 'number_office LIKE ' . "'" .$search->stripSearch($_POST) . "'") as $values)
  {
    echo '<tr>';
    foreach($values as $key => $value)
      {
        echo '<td class="' . $key . '">' . $value . '</td>';
      }
    echo '</tr>';
  }
echo '</table>';
?>

Благодаря примеру @DaemonHK

READ ALSO
Перестали рассылаются пуши через ApnsPHP, кодировка

Перестали рассылаются пуши через ApnsPHP, кодировка

Всем привет, столкнулся с проблемой при отправке пушей средствами ApnsPHP

113
Сортировка массива по родителю

Сортировка массива по родителю

Нужно отсортировать массив, чтобы дочерние элементы шли сразу после родителяСложность в том, что в корне не обязательно будут стоять элементы...

163
НЕ могу вывести цены по убыванию laravel

НЕ могу вывести цены по убыванию laravel

Всем привет, не могу вывести цены по убыванию Мой контроллер

152