小编典典

在准备好的语句中两次使用变量

sql

我开始将准备好的语句用于php中的sql查询,并以此为起点提出了一个问题。

我有一个在登录时从表中获取用户ID的功能。我希望用户能够使用其用户名或电子邮件地址进行登录。

所以我的sql语句是:

SELECT * FROMlogin在哪里username =?或emailAddress =?

现在基本上是当在此查询usernameemailAddress将是相同的,因为它可以是或。

因此,在绑定我的语句时,我会两次绑定我的变量:

bind_param('ss', $user, $user);

因此,username和的值emailAddress必须相同。本质上,我想$user成为两个占位符的价值。

我的问题是: 我这样做正确吗? 有没有更有效的方法?


阅读 205

收藏
2021-04-14

共1个答案

小编典典

是的,您必须将其绑定两次。如果由于某种原因而反对,可以将查询改写为:

SELECT *
FROM `login` l cross join
      (select ? as thename) const
WHERE l.`username` = thename OR `emailAddress` = thename;

这是使用子查询来命名参数,因此可以在查询中多次引用它。

2021-04-14