MVC架构下调用模型返回空数组,print_r($donnees)输出Array()排查
问题排查:查询返回空数组的原因及解决办法
以下是导致print_r($donnees)输出Array()的常见原因及对应解决方案:
模型方法未接收参数
你的authModele的authenticate方法没有声明接收$login和$mdp参数,导致SQL中的占位符无法被正确赋值,自然查询不到数据。修改模型代码,为方法添加参数:public function authenticate($login, $mdp) { $db = db_connect(); $sql = 'SELECT * FROM Visiteur WHERE login = ? AND mdp = ?'; $resultat = $db->query($sql, [$login, $mdp]); $resultat = $resultat->getResult(); return $resultat; }数据库密码与传入值不匹配
检查Visiteur表的mdp字段存储形式:- 如果是加密存储(如BCrypt、MD5),直接传入明文
oppg5会匹配失败。此时应先根据登录名查询用户信息,再用对应加密算法验证密码:public function authenticate($login, $mdp) { $db = db_connect(); $sql = 'SELECT * FROM Visiteur WHERE login = ?'; $user = $db->query($sql, [$login])->getRow(); if ($user && password_verify($mdp, $user->mdp)) { return [$user]; // 保持返回数组格式 } return []; }
- 如果是加密存储(如BCrypt、MD5),直接传入明文
表名/字段名拼写或大小写问题
确认数据库中的表名、字段名与SQL中的写法完全一致:- 部分数据库(如Linux环境下的MySQL)区分表名大小写,若实际表名为
visiteur全小写,SQL中写Visiteur会查询失败。 - 检查字段名是否拼写正确,比如是否应为
password而非mdp。
- 部分数据库(如Linux环境下的MySQL)区分表名大小写,若实际表名为
SQL执行错误排查
可在模型中添加错误捕获,直接查看数据库返回的错误信息:$resultat = $db->query($sql, [$login, $mdp]); if ($db->error()) { print_r($db->error()); // 输出错误详情,定位SQL问题 }
内容的提问来源于stack exchange,提问作者King Crimson
相关产品推荐
相关产品推荐

