Как использовать переменные PHP в запросе HEREDOC SQL? - PullRequest
2 голосов
/ 28 марта 2019

Я пытаюсь выполнить SQL-запрос в PHP, используя форму HEREDOC. В то время как однострочная форма работает правильно, такая же вещь не работает в форме HEREDOC.

Это код HEREDOC, который я пытаюсь использовать:

$sql = <<<SQL
    SELECT *
    FROM `users`, `passwords`
    WHERE users.User_id = passwords.User_id 
    AND {$formusername} = users.User_name
    AND {$formpassword} = passwords.User_password
SQL;

Приведенный выше оператор возвращает 0 строк, когда я знаю, что значения, которые я предоставляю через мою форму, должны давать как минимум 1 строку. Кроме того, я знаю, что проблема в операторах AND, потому что удаление их приводит к строкам. Я подозреваю, что именно способ, которым я пишу переменные в операторе, вызывает проблему.

Синтаксис ниже работает правильно:

$sql = 'SELECT * FROM users, passwords WHERE users.User_id = passwords.User_id AND "'.$formusername.'" = users.User_name AND "'.$formpassword.'" = passwords.User_password';

1 строка корректно возвращается для значений, которые я предоставляю через форму HTML5.

Что не так с моим синтаксисом HEREDOC?

Редактировать: я знаю, что должен использовать подготовленные операторы, чтобы избежать внедрения SQL. Это лишь небольшой пример для класса, и мне нужна форма HEREDOC для работы.

1 Ответ

3 голосов
/ 28 марта 2019

Попробуйте это:

$sql = <<<SQL
    SELECT *
    FROM `users`, `passwords`
    WHERE users.User_id = passwords.User_id 
    AND "{$formusername}" = users.User_name
    AND "{$formpassword}" = passwords.User_password
SQL;

Проблема в том, что в переменных отсутствуют кавычки ("), как просто {$formusername} вместо "{$formusername}". Надеюсь, что это решит проблему.

...