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

部署在Azure WebApp的Laravel无法向Azure SQL执行增改操作求助

Laravel部署Azure WebApp后无法写入Azure SQL数据库的解决方案

排查方向及解决步骤

1. 确认数据库用户写入权限

Azure SQL的登录用户默认可能仅拥有只读权限,即便能正常读取数据,执行INSERT/UPDATE操作仍需额外授权:

  • 登录Azure Portal进入目标SQL数据库,打开「查询编辑器」
  • 执行授权语句:
    -- 给用户授予指定表的写入权限
    GRANT INSERT, UPDATE ON [dbo].[users] TO [你的数据库用户名];
    -- 或者授予整个数据库的写入权限(适合测试环境)
    GRANT DATAWRITER TO [你的数据库用户名];
    

2. 修复Laravel与Azure SQL的时间戳兼容性

Azure SQL的timestamp类型是行版本标识(非时间字段),与MySQL的timestamp完全不同:

  • 确保数据库表的created_at/updated_at字段类型为datetime2(Azure SQL推荐的时间类型)
  • 在Laravel模型中显式指定时间格式:
    // 在User模型中添加
    protected $dateFormat = 'Y-m-d H:i:s';
    protected $casts = [
        'created_at' => 'datetime:Y-m-d H:i:s',
        'updated_at' => 'datetime:Y-m-d H:i:s',
    ];
    

3. 验证CSRF令牌是否正确传递

Laravel默认会拦截无CSRF令牌的POST/PUT请求:

  • 检查表单代码是否在<form>标签内包含@csrf指令
  • 如果是AJAX提交,确保请求头携带X-CSRF-TOKEN,值可通过页面meta[name="csrf-token"]标签获取

4. 查看Laravel错误日志定位问题

  • 在Azure WebApp的「监控>日志流」中查看实时请求日志
  • 或下载storage/logs目录下的日志文件,查找写入操作时的具体报错(比如字段不匹配、SQL语法错误)

5. 优化数据库连接配置

  • 避免在代码中硬编码明文密码,改用Azure WebApp的「配置>应用程序设置」添加数据库连接字符串,Laravel中通过env('AZURE_SQL_CONNECTION_STRING')读取
  • 在config/database.php的sqlsrv连接配置中添加加密设置:
    'sqlsrv' => [
        'driver' => 'sqlsrv',
        'host' => env('DB_HOST'),
        'database' => env('DB_DATABASE'),
        'username' => env('DB_USERNAME'),
        'password' => env('DB_PASSWORD'),
        'charset' => 'utf8',
        'prefix' => '',
        'encrypt' => true, // 必须开启,Azure SQL默认要求加密连接
        'trust_server_certificate' => true, // 解决证书验证问题
    ],
    

6. 确认路由HTTP方法匹配

  • 检查更新用户的路由是否为PUT/PATCH方法(参考路由列表)
  • 表单提交时需添加@method('PUT')指令,否则POST请求无法匹配到更新路由:
    <form method="POST" action="/users/{{ $user->id }}">
        @csrf
        @method('PUT')
        <!-- 表单字段 -->
    </form>
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 14:20:49