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

PHP上传音频脚本SQL执行返回成功但MySQL无新增行如何解决

问题原因及解决方法

下面是该场景下的所有常见诱因及对应修复方案:

  • 事务未提交
    如果你在数据库连接配置中关闭了PDO::ATTR_AUTOCOMMIT自动提交,或者手动开启了事务未显式调用commit(),execute()执行成功仅代表事务临时执行正常,脚本结束后会自动回滚,数据不会持久化到数据库。
    解决方法:确认业务逻辑中没有多余的rollBack()调用,INSERT执行完成后主动调用$pdo->commit()提交事务,或者恢复自动提交配置。
  • INSERT语句无实际新增行
    如果你使用了INSERT IGNORE、INSERT ... ON DUPLICATE KEY UPDATE语法,当表中存在唯一键冲突时,INSERT不会生成新行,但SQL语句本身执行无错误,execute()仍会返回true。
    解决方法:执行完成后调用$stmt->rowCount()校验影响行数,如果返回值为0说明无新行插入,检查表的唯一索引(比如音频哈希、文件路径等字段),确认是否上传了重复内容触发了冲突逻辑。
  • 数据库连接指向错误
    可能出现配置混淆导致脚本连接的数据库不是你查询的目标库:比如开发/生产环境配置错配、连接参数中的dbname填错、连接到了同服务器的其他测试库。
    解决方法:在INSERT逻辑前新增代码打印当前连接的数据库echo $pdo->query('SELECT DATABASE()')->fetchColumn();,确认连接对象指向的是目标库,同时核对host、port、账号密码等连接参数。
  • 逻辑删除字段过滤
    如果你的AllAudios表存在is_deleted、deleted_at这类逻辑删除字段,插入时如果误给该字段赋值为已删除状态,或者字段默认值为已删除,你日常查询时带了is_deleted = 0的过滤条件就会查不到该行。
    解决方法:执行SELECT * FROM AllAudios ORDER BY id DESC LIMIT 10不加任何过滤条件查询最新行,确认插入的数据是否存在只是被标记为删除,调整INSERT语句对应字段的赋值逻辑即可。
  • 错误判断逻辑遗漏
    如果你将PDO的错误模式设置为PDO::ERRMODE_SILENT静默模式,SQL执行报错时不会抛出异常,如果你误判了execute()的返回值也会误以为执行成功。
    解决方法:开启PDO异常模式排查具体错误,代码示例如下:
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    try {
        $stmt->execute();
    } catch (PDOException $e) {
        var_dump($e->getMessage());
        exit;
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 09:24:03