我正在尝试使用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表格才能工作。
试试这个:
$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}"
。希望能解决这个问题。