如何在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', '书籍添加成功'); } }
可选优化建议
- 路由兼容:如果你使用的是Laravel 8及以上版本,路由写法需要调整为:
use App\Http\Controllers\BooksController; Route::post('/addbook', [BooksController::class, 'addBooks'])->name('addbook');
- 视图简化:csrf令牌可以直接用Blade指令
@csrf代替手动写隐藏域,更简洁:
<form class="row g-3" action="{{ route('addbook') }}" method="post"> @csrf <!-- 其余表单元素保持不变即可 --> </form>
- 新增表单验证:避免非法值插入数据库,可以在控制器方法最前面加入验证逻辑:
$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
相关产品推荐
相关产品推荐

