Динамическое создание условий ИЛИ путем передачи массива в запрос в MySQL Stack Overflow

Я пытаюсь создать условие ИЛИ динамически, используя массив. Учитывая массив, конечно же имена $courses = array('Eng, 'Deu', 'Bio', 'Chemi') Я хочу иметь запрос SQL, который использует значения массива в своем предложении AND с условиями OR, такими как:

    SELECT *
FROM classe
/* The OR conditions should be created in AND clause using array */
WHERE class = 'EFG' AND (course = 'Eng' OR course = 'Deu' OR course = 'Bio')

Я пытаюсь сделать это в PHP MySQL.

Любая помощь могла бы быть полезна.

Заранее спасибо.

1

Решение

Вместо так много OR пункты, вы можете просто использовать IN(..):

SELECT *
FROM classe
WHERE class = 'EFG' AND course IN ('Eng' ,'Deu', 'Bio')

В коде PHP вы можете использовать implode() функция для преобразования массива в строку, разделенную запятыми, и использования ее при генерации строки запроса.

2

Другие решения

IN пункт будет проще в использовании, чем ORs. Если вы используете PDO, вы можете воспользоваться его execute динамически связывать и создавать заполнители, а затем просто передавать в него свой массив.

$courses = array('Eng', 'Deu', 'Bio', 'Chemi');
$placeholders = rtrim(str_repeat('?, ', count($courses)), ', ');
$query = "select * from table WHERE class = 'EFG' AND course in ({$placeholders})";
$stmt = $pdo->prepare($query);
$stmt->execute($courses);

Демо-версия: https://3v4l.org/jcFSv (Бит PDO не функционален)

1