Звучит ли мой запрос правильно?

Является ли правильным исполнением запроса следующий код? 

```php
function connectDB() {
    try {  
        $errorMessage = 'Ошибка подключения к базе данных';
        $DB = 'mysql:host='.DB_HOST.';dbname='.DB_NAME;
        $conn = new PDO($DB, DB_USER, DB_PASSWORD);  
        $conn ->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );  
        return $conn;
    }  
    catch(PDOException $e) {  
        file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
        throw new Exception($errorMessage);
    }
}

function getParameters($default = '') {
    $data = [
        'surname' => isset($_POST['surname']) ? trim(mb_strtolower($_POST['surname'])) : $default,
        'name' => isset($_POST['name']) ? trim(mb_strtolower($_POST['name'])) : $default,
        'fathername' => isset($_POST['fathername']) ? trim(mb_strtolower($_POST['fathername'])) : $default,
        'phone' => isset($_POST['phone']) ? trim(preg_replace('/[^0-9,+]/', '',($_POST['phone']))) : $default,
        'email' => isset($_POST['email']) ? trim(mb_strtolower($_POST['email'])) : $default,
    ];
    return $data;
}

function checkPeople($data, $conn){
    $query = "SELECT * FROM `orders2022` WHERE LOWER(`surname`) LIKE CONCAT('%', ?, '%') AND LOWER(`name`) LIKE CONCAT('%', ?, '%') AND LOWER(`fathername`) LIKE CONCAT('%', ?, '%')";
    $stmt = $conn -> prepare ($query);
    $stmt->execute([$data['surname'], $data['name'], $data['fathername']]);
    $result = $stmt->fetch(PDO::FETCH_ASSOC);
}
```
  • 18 февраля 2024 г. 16:08
Ответы на вопрос 2
Да, ваш запрос звучит правильно. Код в вашем запросе выглядит правильным и корректным в контексте функций подключения к базе данных, обработки параметров и выполнения запроса к базе данных для проверки данных о человеке. Все функции выполняют свои задачи в соответствии с ожидаемым функционалом.
Мне необходимо только узнать есть ли такой заказчик с такими данными.

1) Оформляйте запрос строками, так будет гораздо проще и вам, и другим разработчикам понять что вы пишете и как оно работает:
SELECT * 
FROM `orders2022` 
WHERE LOWER(`surname`) LIKE CONCAT('%', ?, '%') 
AND LOWER(`name`) LIKE CONCAT('%', ?, '%') 
AND LOWER(`fathername`) LIKE CONCAT('%', ?, '%')

2) Синтаксис верный, но если вам важно найти "хоть одно совпадение", лучше использовать LIMIT 1, это остановит базу в поиске всех вхождений, то есть перебора ВСЕЙ таблицы вместо выхода по первому вхождению.
3) Неплохо давать более четкое описание проблемы, чтобы другим не пришлось гадать о чем код, так как никто кроме вас в контекст задачи не погружен.
Похожие вопросы