【发布时间】:2019-08-18 18:35:01
【问题描述】:
我正在尝试使用 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 表单才能工作。
【问题讨论】:
-
我注意到的一件事是您没有引用
$formusername和$formpassword变量,但它们在您的第二个代码 sn-p 中被引用。尝试像这样添加引号:AND "{$formusername}" =和$formpassword相同 -
^ 是的,这就是问题所在。由于变量没有被引用,它会将它们解释为列名而不是字符串
-
防止sql注入,需要使用参数查询