php - 为什么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 上的一个简单网站。
解决方案
我猜这里x OR y AND z
可以解释为x OR (y AND z)
“管理员或具有此用户名的初级管理员”,这不是您想要的。您在第一个条件下得到匹配,忽略其余条件。
这可以通过分组来解决,例如(x OR y) AND z
,但您真正需要的是:
WHERE username=:username AND userType IN ('ADMIN', 'JUNIOR ADMIN')
推荐阅读
- ios - Swift 从 UITabBarController 中删除导航栏的空间
- node.js - 如何让 ts-node REPL 了解参考路径,尤其是 globals.d.ts
- ruby-on-rails - 为什么模块 ClassMethod 在这里不提供类方法
- javascript - 从javascript中的一串html元素中提取URL
- php - Instagram 基本显示 API 返回错误
- r - 预测值之和
- c# - Purchases.Voidedpurchases.List 返回空响应
- r - 如何在 gt 中的多列上使用相同的渐变?
- angular - 如何从 Angular 中的 RESTful API 获取 JSON?
- openlayers - OpenLayers 能否从用户输入安全地渲染 GPX/GeoJSON/KML?