为什么mysql in lamp stack on google cloud vm instance return 查询结果错误?
Why does mysql in lamp stack on google cloud vm instance return wrong query results?
在我的常规主机上此查询 return 正确结果:
$auth_check = $db->raw()
->bind( ":username", "email@gmail.com" )
->exec( "SELECT * FROM users WHERE userType = 'ADMIN' || userType = 'JUNIOR ADMIN'
AND username = :username " )->fetch();
但是当我在 google 云平台计算 VM 上使用相同的代码时,它给出了奇怪的结果:
用户名 |用户类型 |名称 |出生日期
alainatianastewart@gmail.com |管理员 |狮子座管理员 | 1907-01-01
发生这种情况有什么原因吗?我在 gcp 上使用 LAMP 堆栈和一个简单的网站。
我在这里猜测 x OR y AND z
可以解释为 x OR (y AND z)
,这意味着“管理员,或者具有此用户名的初级管理员”,这不是您想要的。您在第一个条件下获得匹配,忽略其余条件。
这可以通过分组来解决,比如(x OR y) AND z
,但你真正需要的是:
WHERE username=:username AND userType IN ('ADMIN', 'JUNIOR ADMIN')
在我的常规主机上此查询 return 正确结果:
$auth_check = $db->raw()
->bind( ":username", "email@gmail.com" )
->exec( "SELECT * FROM users WHERE userType = 'ADMIN' || userType = 'JUNIOR ADMIN'
AND username = :username " )->fetch();
但是当我在 google 云平台计算 VM 上使用相同的代码时,它给出了奇怪的结果:
用户名 |用户类型 |名称 |出生日期
alainatianastewart@gmail.com |管理员 |狮子座管理员 | 1907-01-01
发生这种情况有什么原因吗?我在 gcp 上使用 LAMP 堆栈和一个简单的网站。
我在这里猜测 x OR y AND z
可以解释为 x OR (y AND z)
,这意味着“管理员,或者具有此用户名的初级管理员”,这不是您想要的。您在第一个条件下获得匹配,忽略其余条件。
这可以通过分组来解决,比如(x OR y) AND z
,但你真正需要的是:
WHERE username=:username AND userType IN ('ADMIN', 'JUNIOR ADMIN')