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

如何在Laravel中向数据库添加数据?数组写入语法错误如何解决

问题原因及解决方案

错误根因

你的报错完全是PHP语法不规范导致的,所有问题点如下:

  • 关联数组语法错误:PHP中关联数组的键和值需要使用=>连接,而不是=
  • 数组元素分隔符错误:数组内多个元素之间需要用英文逗号,分隔,你当前代码中每个键值对末尾用了分号;,不符合PHP语法规则
  • 变量未定义:你在数组中直接使用了$pageCount、$readPage、$insertedAt三个变量,但这三个变量没有提前声明赋值,PHP无法识别
  • 额外的数组嵌套:$data = array([...])写法相当于给单条数据额外套了一层数组,虽然insert()方法支持传入二维数组批量插入,但如果仅插入单条数据可以直接去掉多余的嵌套层级

修正后的完整控制器代码

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class BooksController extends Controller
{
    public function addBooks(Request $request)
    {
        // 提前声明变量,避免未定义报错
        $pageCount = $request->input('pageCount');
        $readPage = $request->input('ReadPage');
        $insertedAt = now(); // Laravel自带now()助手函数,不需要手动new DateTime

        $data = [
            'name' => $request->input('bookName'),
            'year' => $request->input('tahunT'),
            'author' => $request->input('author'),
            'summary' => $request->input('Summary'),
            'publisher' => $request->input('publishers'),
            'pageCount' => $pageCount,
            'readPage' => $readPage,
            'finished' => $pageCount == $readPage ? true : false,
            'reading' => $readPage > 0 ? true : false,
            'insertedAt' => $insertedAt,
            'updatedAt' => $insertedAt
        ];

        DB::table('books')->insert($data);
        
        // 建议新增插入完成后的返回逻辑,示例如下
        return back()->with('success', '书籍添加成功');
    }
}

可选优化建议

  1. 路由兼容:如果你使用的是Laravel 8及以上版本,路由写法需要调整为:
use App\Http\Controllers\BooksController;

Route::post('/addbook', [BooksController::class, 'addBooks'])->name('addbook');
  1. 视图简化:csrf令牌可以直接用Blade指令@csrf代替手动写隐藏域,更简洁:
<form class="row g-3" action="{{ route('addbook') }}" method="post">
    @csrf
    <!-- 其余表单元素保持不变即可 -->
</form>
  1. 新增表单验证:避免非法值插入数据库,可以在控制器方法最前面加入验证逻辑:
$validated = $request->validate([
    'bookName' => 'required|string|max:255',
    'tahunT' => 'required|integer|min:1900|max:'.date('Y'),
    'author' => 'required|string|max:255',
    'publishers' => 'required|string|max:255',
    'pageCount' => 'required|integer|min:1',
    'ReadPage' => 'required|integer|lte:pageCount',
    'Summary' => 'nullable|string'
]);

验证通过后使用$validated数组的值组装插入数据,安全性更高。

内容的提问来源于stack exchange,提问作者Shabrina Nurdiani S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:51:01