Php 为什么google云vm实例上lamp堆栈中的mysql返回错误的查询结果?
在我的普通主机上,此查询返回正确的结果:Php 为什么google云vm实例上lamp堆栈中的mysql返回错误的查询结果?,php,mysql,google-cloud-platform,lamp,Php,Mysql,Google Cloud Platform,Lamp,在我的普通主机上,此查询返回正确的结果: $auth_check = $db->raw() ->bind( ":username", "email@gmail.com" ) ->exec( "SELECT * FROM users WHERE userType = 'ADMIN' || userType = 'JUNIOR ADMIN' AND username = :username "
$auth_check = $db->raw()
->bind( ":username", "email@gmail.com" )
->exec( "SELECT * FROM users WHERE userType = 'ADMIN' || userType = 'JUNIOR ADMIN'
AND username = :username " )->fetch();
但当我在谷歌云平台计算虚拟机上使用相同的代码时,它给出了奇怪的结果:
用户名|用户类型|名称| DOB
alainatianastewart@gmail.com|管理员|利奥管理员| 1907-01-01
这有什么原因吗?我将LAMP stack与gcp上的一个简单网站一起使用。我猜
x或y和z
可以解释为x或(y和z)
,这意味着“要么是管理员,要么是具有此用户名的初级管理员”,而这不是您想要的。你在第一个条件下得到了一个匹配,忽略了其余的条件
这可以通过分组来解决,如(x或y)和z
,但您真正需要的是:
其中username=:username和userType IN('ADMIN','JUNIOR ADMIN')
我猜x或y和z
可以解释为x或(y和z)
,意思是“要么是管理员,要么是具有此用户名的初级管理员”,而这不是您想要的。你在第一个条件下得到了一个匹配,忽略了其余的条件
这可以通过分组来解决,如(x或y)和z
,但您真正需要的是:
其中username=:username和userType IN('ADMIN','JUNIOR ADMIN')
通常使用或
作为|
表示“字符串连接”,具体取决于服务器设置。在这种情况下,您实际上应该在('ADMIN',…)表单中使用更简单的userType?通常,他们可以使用ORM函数从['ADMIN','JUNIOR ADMIN']
中进行选择。通常或用作|
可以表示“字符串连接”,具体取决于服务器设置。在这种情况下,您实际上应该在('ADMIN',…)
表单中使用更简单的userType?通常情况下,他们可以使用ORM函数从['ADMIN','JUNIOR ADMIN']
中进行选择。