Laravel调用SQL Server带参存储过程报错:stdClass无法转字符串
问题原因
DB::select() 返回的是包含 stdClass 对象 的数组,而调用存储过程时需要传递键名匹配占位符的关联数组。你直接将第一个查询的结果数组传给第二个查询,Laravel 无法将 stdClass 对象转换为字符串作为存储过程的参数,因此抛出 Object of class stdClass could not be converted to string 错误。
解决方法
方案1:用 DB::scalar() 直接获取单个值(推荐)
如果 selectSKBDN 查询只返回一行一列的结果,用 DB::scalar() 可以直接拿到 no_skbdn 的字符串值,无需处理对象数组:
// 直接获取no_skbdn的单个值 $skbdn = DB::scalar('SELECT no_skbdn FROM selectSKBDN'); // 传递关联数组参数,键名对应存储过程的占位符 $nama = DB::select('EXEC selectNameInSO :no_skbdn', ['no_skbdn' => $skbdn]); return view('layouts.form_so', ['skbdn' => $skbdn, 'nama' => $nama]);
方案2:手动提取对象中的属性
如果需要保留原查询的完整结果,可手动从返回的对象数组中提取 no_skbdn 的值:
$skbdnResult = DB::select('SELECT no_skbdn FROM selectSKBDN'); // 先判断查询是否有结果,避免索引越界 if (!empty($skbdnResult)) { $skbdn = $skbdnResult[0]->no_skbdn; $nama = DB::select('EXEC selectNameInSO :no_skbdn', ['no_skbdn' => $skbdn]); } else { // 处理查询无结果的场景 $skbdn = null; $nama = []; } return view('layouts.form_so', ['skbdn' => $skbdn, 'nama' => $nama]);
内容的提问来源于stack exchange,提问作者jerryb
相关产品推荐
相关产品推荐

