我开始将准备好的语句用于php中的sql查询,并以此为起点提出了一个问题。
我有一个在登录时从表中获取用户ID的功能。我希望用户能够使用其用户名或电子邮件地址进行登录。
所以我的sql语句是:
SELECT * FROMlogin在哪里username =?或emailAddress =?
login
username
emailAddress
现在基本上是当在此查询username和emailAddress将是相同的,因为它可以是或。
因此,在绑定我的语句时,我会两次绑定我的变量:
bind_param('ss', $user, $user);
因此,username和的值emailAddress必须相同。本质上,我想$user成为两个占位符的价值。
$user
我的问题是: 我这样做正确吗? 有没有更有效的方法?
是的,您必须将其绑定两次。如果由于某种原因而反对,可以将查询改写为:
SELECT * FROM `login` l cross join (select ? as thename) const WHERE l.`username` = thename OR `emailAddress` = thename;
这是使用子查询来命名参数,因此可以在查询中多次引用它。