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

问题描述 投票:2回答:1

我正在尝试使用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行时,上面的语句返回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注入。这只是课堂上的一个小例子,我需要HEREDOC表格才能工作。

php mysql mysqli heredoc
1个回答
3
投票

试试这个:

$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}"。希望能解决这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.