【发布时间】:2019-10-09 09:11:06
【问题描述】:
我正在慢慢地将有 MSQLI 的网站页面转换为 PDO。但是我有一个登录脚本的这一部分,我不确定它是否可以在 PDO 中完成,如果它不能,任何人都对如何使其安全有任何建议。 它与下面的代码部分有关,它是一个与 $pass_fail 变量相关的多查询,然后是一个我可能可以解决的单个选择查询 $pass_fail_query 变量。但它是我在使用 PDO 时遇到的多重查询,我该如何执行它?
$pass_fail = "
DELETE FROM `login_fail`
WHERE
`last_fail_login` < DATE_SUB(NOW(), INTERVAL 5 MINUTE);
";
$pass_fail .= "
INSERT INTO login_fail (
user_id,
email,
last_fail_login,
fail_login_ip
) VALUES (
'$user_id',
'$email',
'$last_login_date',
'$ip'
);
";
$pass_fail .= "
UPDATE members SET
`last_fail_login` = '$last_login',
`fail_login_ip`= '$ip'
WHERE
email = '$email'
";
$pass_fail_query = "
SELECT
*
FROM `login_fail`
WHERE
`email` = '$email'
AND `last_fail_login` > date_sub(now(), interval 5 minute)
";
【问题讨论】:
-
PDO 支持在 1 个调用中运行多个查询。但是,我建议您查看Prepared Statements 以防止 SQL 注入。绝大多数情况下,在 SQL 字符串中使用 PHP 变量是一个大错误。
-
AFAIK 绝对不需要使用多查询。您可以通过单独调用执行每个查询来做同样的事情,这就是您在 PDO 中的做法。