基于MVC架构的PHP无法通过邮箱从MySQL获取用户自增ID
问题修复方案
核心问题1:SQL预处理语句语法错误
PDO预编译的占位符不需要额外加单引号包裹,你写的':lemail'会被识别为普通字符串而非动态参数,导致查询永远匹配不到数据。
核心问题2:传参错误
你需要传入邮箱参数查询ID,但前端调用getIDUser时传入的是$_SESSION['nomUser'](用户名),不是用户的邮箱值,需要替换为session中存储的用户邮箱对应的字段。
核心问题3:返回值处理不合理
fetchAll()会返回二维数组,针对单条ID查询使用fetch(PDO::FETCH_COLUMN)可以直接返回ID的标量值,不需要额外解析数组。
修复后的代码
- APIManager.php 修改:
public function getIDBDUser($lemail){ // 去掉占位符的单引号 $req = "SELECT ID_USER FROM user WHERE mail = :lemail"; $stmt = $this->getBdd()->prepare($req); $stmt->bindParam(':lemail', $lemail, PDO::PARAM_STR); $stmt->execute(); // 直接取第一列的值也就是ID $id = $stmt->fetch(PDO::FETCH_COLUMN); var_dump($id); return $id; }
- page.php 修改:
if (isset($_POST['deleteUser'])) { // 替换为你session中存储用户邮箱的字段名,比如$_SESSION['userMail'] $lid = $apicontrol->getIDUser($_SESSION['userMail']); var_dump($lid); // $apicontrol->deleteUser($lid); // header("Location : index.html"); }
内容的提问来源于stack exchange,提问作者Pikate
相关产品推荐
相关产品推荐

