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

如何解决Illuminate\Database\Grammar::parameterize()需数组参数却传入字符串的错误

错误根因

DB::select() 方法执行查询后返回的是包含所有匹配结果的数组,即使你的查询逻辑只需要获取单个ID值,返回的也是包裹了stdClass对象的结果集数组,而非直接的ID数值/字符串。你直接将该数组赋值给course_id字段,模型执行保存操作时无法识别数组类型的字段值,就会触发参数类型不匹配的报错。

另外你当前直接拼接变量到原生SQL的写法存在SQL注入风险,建议同步调整。

修复方案

推荐使用查询构造器的value()方法直接提取单个字段的值,修改原查询语句即可:

// 替换原$courseid查询行,直接获取匹配到的课程ID
$courseid = DB::table('course')->where('course_code', $coursecode)->value('id');

如果需要兼容课程编码不存在的异常场景,可以增加校验逻辑,避免出现course_id为空的错误:

if (empty($courseid)) {
    return back()->with('alert-error', '输入的课程编码不存在,请检查后重试');
}
修复后完整代码
public function assign(Request $request)
{
    $courselist = new Courselist;
    
    $coursecode = $request->input('coursecode'); 
    // 修正查询逻辑,直接取ID,同时规避SQL注入风险
    $courseid = DB::table('course')->where('course_code', $coursecode)->value('id');
    
    // 可选:课程不存在校验
    if (empty($courseid)) {
        return back()->with('alert-error', '输入的课程编码无效,无法匹配到对应课程');
    }
    
    $courselist->course_id = $courseid;
    $courselist->coordinator = $request->input('coordinatorname');
    $courselist->internal = $request->input('imname');
    $courselist->external = $request->input('exname');
    $courselist->dean = $request->input('deanname');
    $courselist->save();
    
    return back()->with('alert-success','Data successfully added!');   
}
补充说明

如果你已经创建了Course模型,也可以用模型查询写法更简洁:

$courseid = Course::where('course_code', $coursecode)->value('id');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:39:02