首页 > 解决方案 > 为什么google cloud vm instance上的lamp stack中的mysql会返回错误的查询结果?

问题描述

在我的常规主机上,此查询返回正确的结果:

$auth_check = $db->raw()
       ->bind( ":username", "email@gmail.com" )
       ->exec( "SELECT * FROM users WHERE userType = 'ADMIN' || userType = 'JUNIOR ADMIN' 
AND username = :username " )->fetch();

但是当我在谷歌云平台计算虚拟机上使用相同的代码时,它给出了奇怪的结果:

用户名 | 用户类型 | 姓名 | 出生日期

alainatianastewart@gmail.com | 管理员 | 狮子座管理员 | 1907-01-01

发生这种情况有原因吗?我正在使用 LAMP 堆栈和 gcp 上的一个简单网站。

标签: phpmysqlgoogle-cloud-platformlamp

解决方案


我猜这里x OR y AND z可以解释为x OR (y AND z)“管理员或具有此用户名的初级管理员”,这不是您想要的。您在第一个条件下得到匹配,忽略其余条件。

这可以通过分组来解决,例如(x OR y) AND z,但您真正需要的是:

WHERE username=:username AND userType IN ('ADMIN', 'JUNIOR ADMIN')

推荐阅读