Я пытаюсь создать условие ИЛИ динамически, используя массив. Учитывая массив, конечно же имена $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.
Любая помощь могла бы быть полезна.
Заранее спасибо.
Вместо так много OR
пункты, вы можете просто использовать IN(..)
:
SELECT *
FROM classe
WHERE class = 'EFG' AND course IN ('Eng' ,'Deu', 'Bio')
В коде PHP вы можете использовать implode()
функция для преобразования массива в строку, разделенную запятыми, и использования ее при генерации строки запроса.
IN
пункт будет проще в использовании, чем OR
s. Если вы используете 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 не функционален)