Динамическое создание условий ИЛИ путем передачи массива в запрос в MySQL PHP - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь создать условие ИЛИ динамически, используя массив.Учитывая массив, конечно имена $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,

Любая помощь будет очень признательна.

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

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Предложение IN будет проще в использовании, чем OR с.Если вы используете 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 не функционален))

0 голосов
/ 20 ноября 2018

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

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

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

...