如何在 HEREDOC SQL 查询中使用 PHP 变量?

How to use PHP variables in HEREDOC SQL query?

我正在尝试使用 HEREDOC 表单在 PHP 中执行 SQL 查询。虽然单行表格可以正常工作,但同样的事情在 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;

当我知道我通过表单提供的值应该至少产生 1 行时,上面的语句 returns 0 行。此外,我知道问题出在 AND 语句中,因为删除它们会产生行。我怀疑这是我在导致问题的语句中编写变量的方式。

以下语法可以正常工作:

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

我通过 HTML5 表单提供的值正确返回了 1 行。

我的 HEREDOC 语法有什么问题?

编辑:我知道我应该使用准备好的语句来避免 SQL 注入。这只是 class 的一个小例子,我需要 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;

问题是变量中缺少引号 ("), 就像 {$formusername} 而不是 "{$formusername}"。 希望能解决问题。