PHP中如何正确读取SQL查询返回的o_user_exists字段值
问题原因
- 参数传递缺失:你的
signIn方法调用select查询时,仅传入了SQL语句,没有把$userName、$password作为绑定参数传给select方法的第二个形参,导致预编译查询没有拿到入参,返回的结果不符合预期。 - 数组结构理解错误:
select方法里调用fetch_all(MYSQLI_ASSOC)返回的是二维数组,单条查询结果的结构为[ 0 => ['o_user_exists' => 1] ],你直接取第一层数组的o_user_exists索引自然不存在。 - 多余的JSON转换操作:
select已经直接返回PHP数组,不需要先json_encode再json_decode做多余转换。
修复步骤
1. 修正LoginModel的signIn方法,补全参数传递
class LoginModel extends Database { public function signIn($userName,$password){ // 把用户名密码按顺序放入数组,作为select方法的第二个参数传入 return $this->select( "select count(*) as o_user_exists from users where usuario = ? and password = ?", [$userName, $password] ); } }
2. 修正控制器调用代码,正确读取数组值
$userModel = new LoginModel(); $actionSignIn = $userModel->signIn($p_userName, $p_password); // 增加判空逻辑避免异常 if (!empty($actionSignIn) && isset($actionSignIn[0]['o_user_exists'])) { echo $actionSignIn[0]['o_user_exists']; } else { // 无匹配用户时的处理逻辑 echo 0; }
补充说明
你最开始写的json_encode($actionSignIn[0],true)返回的是JSON字符串,不是对象,用->访问属性本身就是错误写法,直接读取原生返回的数组即可。
内容的提问来源于stack exchange,提问作者Bruno Sosa Fast Tag
相关产品推荐
相关产品推荐

