PHP PDO: Не можете связать значение с несколькими переменными? - PullRequest
1 голос
/ 27 апреля 2019

Я пытаюсь выполнить запрос, который объединяет несколько таблиц, используя один и тот же внешний ключ, через приведенный ниже запрос, но он возвращает false.

$question_id = 11406;

$query = $db->prepare("SELECT q.question_attempts_permitted, q.question_range, a.answer_text, r.attempt_count 
                           FROM checkup_questions q, checkup_answers a, user_responses r 
                           WHERE a.question_id=:question_id AND q.question_id=:question_id AND r.question_id=:question_id");
$query->bindValue(':question_id', $question_id, PDO::PARAM_INT);
$query->execute();

Однако, если я введу question_id напрямую, запрос вернет желаемый результат.

$query = $db->prepare("SELECT q.question_attempts_permitted, q.question_range, a.answer_text, r.attempt_count 
                       FROM checkup_questions q, checkup_answers a, user_responses r 
                       WHERE a.question_id=11406 AND q.question_id=11406 AND r.question_id=11406");
$query->execute();

Есть ли какое-то ограничение в интерфейсе bindValue, которое приводит к сбою первого запроса, а второй возвращается, как и ожидалось?

1 Ответ

3 голосов
/ 27 апреля 2019

Текст запроса должен быть переписан с использованием JOIN:

$query = $db->prepare("
    SELECT q.question_attempts_permitted, q.question_range, a.answer_text, r.attempt_count 
    FROM checkup_questions q 
    JOIN checkup_answers a ON a.question_id = q.question_id
    JOIN user_responses r ON r.question_id = q.question_id
    WHERE q.question_id=:question_id
");
// you can provide placeholder without `:`
$query->bindValue('question_id', $question_id, PDO::PARAM_INT);
$query->execute();

Здесь у вас есть только один заполнитель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...