Задать вопрос
@mrWan

Какое похожее на условие WHERE 1, которое можно использовать в подготовленном запросе PDO?

$select = "SELECT type FROM tablepart WHERE 1";
 
    if (empty($foo1) && empty($foo2)) {
        $where = '??';  // пробовал так: $where = ':true'; $placeholders[':true'] = ' AND true'; ничего не вышло
                $placeholders[??]// вот сюда нужно засунуть 
    }
    elseif (empty($foo2) && !empty($foo1)) {
        $where = " AND foo1= :foo1";
        $placeholders[':foo1] = $foo1;
    }
    elseif (!empty($foo1) && !empty($foo2)) {
        $where = ' AND foo1= :foo1 AND foo2 = :foo2';
        $placeholders[':foo1'] = $foo1;
        $placeholders[':foo2'] = $foo2;
    }
    $sql = $select . $where; 
    $stmt = $pdo->prepare($sql);
    $stmt->execute($placeholders);
    $data = $stmt->fetchAll();

Конечно можно тут переменную $where проверить на пустоту, и решать конкатени́ровать ее или нет к остальному sql запросу.
  • Вопрос задан
  • 363 просмотра
Подписаться 2 Оценить 7 комментариев
Пригласить эксперта
Ответы на вопрос 2
FanatPHP
@FanatPHP
Чебуратор тега РНР
Как правильно отметили выше, тебе не нужна "ручка для 8 класса": WHERE 1 в PDO работает точно так же.

Другое дело, что все можно сделать гораздо проще, и без where 1, и без кучи условий (представь свой код, если в запросе будет участвовать не два поля, а три). На самом деле условий нужно не больше, чем полей в запросе:
if (!empty($foo1)) {
    $where = "foo1= :foo1";
    $placeholders[':foo1'] = $foo1;
}
if (!empty($foo2)) {
    $where = 'foo2 = :foo2';
    $placeholders[':foo2'] = $foo2;
}
$sql = "SELECT type FROM tablepart";
if ($where)
{
    $sql .= " WHERE ".implode(" AND ", $where);
}
$stmt = $pdo->prepare($sql);
$stmt->execute($placeholders);
$data = $stmt->fetchAll();
Ответ написан
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
а смысл? работет же и так.
через prepare он в любом случае будет экранировать строки и получится ничего.

так что так и оставить where 1 или where 1=1

и спокойно через and дописывать или не дописывать условия.

Но еще лучше взять нормальный sql builder/orm и т.д. который сам это все сделает в нормальном виде.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы