我试图设置我的sql查询来检查多个列,但它不起作用

8tntrjer  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(301)

这个问题在这里已经有答案了

php pdoexception:“sqlstate[hy093]:无效参数号”(4个答案)
两年前关门了。
我已经建立了一个登录系统,在这里我使用用户名或电子邮件地址检查用户是否存在。
这是我的密码:

// DB Connection Included
$q = $dbcon->prepare("SELECT * FROM table WHERE (username=:e OR email=:e)");
$q->execute(array('e'=>$user));

但它不起作用。如果我将查询更改为:

$q = $dbcon->prepare("SELECT * FROM table WHERE username=:e)");

$q = $dbcon->prepare("SELECT * FROM table WHERE email=:e)");

我以前用过这段代码,它一直都很好地工作,所以我不知道为什么这次不工作。
我得到的实际错误是代码中的验证错误。我使用rowcount()函数检查用户是否存在;使用所需的查询,rowcount()返回0。
我也尝试过:

$q = $dbcon->prepare("SET @user = :user SELECT * FROM table WHERE (username=@user OR email=@user)");

这是我在谷歌上找到的另一篇文章中提出的,但这也不起作用。
有人有什么建议吗?
提前谢谢。

5t7ly7z5

5t7ly7z51#

我看没问题,除了括号。尝试。。。

$q = $dbcon->prepare("SELECT * FROM table WHERE username=:e OR email=:e");
bvn4nwqk

bvn4nwqk2#

根据 PDO::Prepare 在调用pdostatement::execute()时,必须为要传入语句的每个值包含一个唯一的参数标记。除非启用了仿真模式,否则不能在准备好的语句中多次使用同名的命名参数标记。
所以试试看-

$q = $dbcon->prepare("SELECT * FROM table WHERE (username=:e1 OR email=:e2)");
$q->execute(array(':e1'=>$user,':e2'=>$user));

相关问题