@Chesterfield25

Как проверить на совпадение в бд?

У меня есть проверка, которая проверяет не занято ли название. А как сделать проверку по нескольким критериям?

// Проверим, не занято ли название
$stmt = pdo()->prepare("SELECT * FROM `shop` WHERE `name` = :name");
$stmt->execute(['name' => $_POST['name']]);
if ($stmt->rowCount() > 0) {
    flash('Этот магазин уже существует.');
    header('Location: addshop.php'); // Возврат на форму регистрации
    die; // Остановка выполнения скрипта
}
  • Вопрос задан
  • 75 просмотров
Пригласить эксперта
Ответы на вопрос 1
@alexalexes
Динамически сформировать текст и список параметров запроса, в зависимости от критериев:
$sql = "SELECT * FROM `shop` WHERE 1=1 "; // 1=1 - классическая заглушка, чтобы можно было удобно добавлять and.
$params = []; // заготовка под входные параметры запроса.
if(isset($_POST['criteria_1']) && $_POST['criteria_1'] == 'on') // выбрали нечто по первому критерию
{
// он проверяет только имя чего-то
$sql .= 'and `name` = :name ' // добавляем условие в текст запроса
$params['name'] = $_POST['name']; // добавляем параметры
}
if(isset($_POST['criteria_2']) && $_POST['criteria_2'] == 'on') // выбрали нечто по второму критерию
{
// он проверяет  например, страну и город
$sql  .= ' and `country` = :country
             and `city` = :city ' // добавляем условие в текст запроса
$params['country'] = $_POST['country']; // добавляем параметры
$params['city'] = $_POST['city']; // добавляем параметры
}
$stmt = pdo()->prepare($sql);
$stmt->execute($params);
if ($stmt->rowCount() > 0) {
    flash('Этот магазин уже существует.');
    header('Location: addshop.php'); // Возврат на форму регистрации
    die; // Остановка выполнения скрипта
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы