You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL执行UPDATE后encrypted_password字段未更新问题求助

问题分析与解决步骤

你遇到的情况是PHP脚本返回{"success":true}但数据库encrypted_password字段未更新,这是因为PDO的execute()返回true仅表示SQL语句执行语法正确,不代表有实际行被更新。以下是具体排查和解决方法:

1. 检查实际更新的行数

在execute()后添加代码,查看受影响的行数:

$resultado = $sentencia->execute([$encrypted_password, $email]);
$filas_actualizadas = $sentencia->rowCount();
// 输出行数用于调试
var_dump($filas_actualizadas);

如果输出int(0),说明WHERE email = ?条件没有匹配到任何记录。

2. 验证WHERE条件的正确性

  • 调试$email的实际值:输出var_dump($email),检查是否包含空格、大小写差异(比如数据库中是admin@test.com,但传入的是Admin@Test.com,且字段排序规则为区分大小写的utf8_bin)。
  • 直接在数据库客户端执行SQL语句测试:
UPDATE tb_administradores SET encrypted_password = '测试哈希' WHERE email = '你传入的邮箱值';

看是否能成功更新,以此排除代码逻辑外的问题。

3. 核对数据库字段名

确认tb_administradores表的字段名是否确实为encrypted_password(对照你的表字段截图),避免字段名拼写错误(比如实际字段是password或enc_password)。

4. 开启PDO错误捕获

在conectar_pdo.php中添加PDO错误模式配置,捕获潜在的SQL执行异常:

$base_de_datos->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

之后如果存在权限不足、字段长度不够等问题,会直接抛出异常,便于定位错误。

5. 检查字段长度限制

password_hash()生成的哈希值默认长度约60字符,确保encrypted_password字段的类型为VARCHAR(255)(或足够容纳的长度),避免因长度不足导致更新失败或数据截断。

6. 排查事务问题

如果conectar_pdo.php中开启了事务(比如调用了$base_de_datos->beginTransaction()),需要在execute()后执行$base_de_datos->commit();,否则更新操作不会持久化到数据库。

内容的提问来源于stack exchange,提问作者mvasco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 03:47:45