我已经构建了一个登录系统,我使用他们的用户名或电子邮件地址检查用户是否存在。
这是我的代码:
$q = $dbcon->prepare("SELECT * FROM table WHERE username=:e)");
但它不起作用。如果我将查询更改为:
,它将完美运行$q = $dbcon->prepare("SELECT * FROM table WHERE email=:e)");
或
$q = $dbcon->prepare("SET @user = :user SELECT * FROM table WHERE (username=@user OR email=@user)");
之前我已经使用过这段代码而且它一直都很完美,所以我不确定为什么它这次不起作用。
我得到的实际错误是我的代码中的验证错误。我使用rowCount()函数检查用户是否存在;使用所需的查询,rowCount()返回0。
我也尝试过:
sample0
sample1
sample11
sample12
sample13
sample14
sample2
sample21
sample3
我在谷歌上发现的另一篇文章中提到了这一点,但这也没有用。
有人有任何建议吗?
提前致谢。
答案 0 :(得分:3)
您必须为您希望的每个值包含唯一的参数标记 调用PDOStatement :: execute()时传入语句。您 不能多次使用同名的命名参数标记 准备好的声明,除非启用仿真模式。
所以试试 -
$q = $dbcon->prepare("SELECT * FROM table WHERE (username=:e1 OR email=:e2)");
$q->execute(array(':e1'=>$user,':e2'=>$user));
答案 1 :(得分:-1)
除了圆括号外,我看起来没问题。试试......
$q = $dbcon->prepare("SELECT * FROM table WHERE username=:e OR email=:e");