Laravel(PHP)General error:1366 整数值不正确问题求助
问题排查与解决方案
嘿,我一眼就看出问题出在哪了——你获取idUtlstr的方式不对,导致插入的不是整数而是集合的JSON字符串,这才触发了General error: 1366错误。
错误原因分析
你用get()方法查询idUtlstr,但get()返回的是Laravel集合对象,哪怕结果只有一条记录,它也是包含单个元素的集合。当你直接把这个集合赋值给idClient时,Laravel会自动把它转成JSON字符串(也就是报错信息里的[{"idUtlstr":25}]),但你的idClient字段是整数类型,数据库自然无法接受这种非整数值,所以抛出了"整数值不正确"的错误。
修正方案
这里提供两种简洁的解决方式,同时建议增加异常判断避免后续问题:
方案1:用value()直接获取单个字段值(最简洁)
value()方法会直接返回匹配到的第一条记录的指定字段值,没有找到则返回null:
$id = DB::table('utilisateur') ->where('email', $request->input("email")) ->value('idUtlstr'); // 先判断是否获取到有效ID,再执行插入 if ($id) { DB::table('client')->insert([ 'idClient' => $id, 'nbrSignl' => 0, 'numPermis' => 0, 'quest1' => 'vide', 'quest2' => 'vide', 'quest3'=> 'vide', 'datePermis' => '2000-01-01', 'numCompte' => 0 , 'blocage' => 'non' ]); } else { // 处理邮箱对应的用户不存在的情况,比如返回错误响应 }
方案2:用first()获取单条记录对象后取值
如果需要用到用户的其他字段,这种方式更灵活:
$utilisateur = DB::table('utilisateur') ->where('email', $request->input("email")) ->first(); if ($utilisateur) { DB::table('client')->insert([ 'idClient' => $utilisateur->idUtlstr, 'nbrSignl' => 0, 'numPermis' => 0, 'quest1' => 'vide', 'quest2' => 'vide', 'quest3'=> 'vide', 'datePermis' => '2000-01-01', 'numCompte' => 0 , 'blocage' => 'non' ]); } else { // 处理用户不存在的逻辑 }
关键提醒
一定要添加if判断来检查是否获取到了有效的用户ID,否则当请求的邮箱不存在时,会插入null到idClient字段,如果该字段设置为非空约束,会再次触发数据库错误。
内容的提问来源于stack exchange,提问作者aymen medjader
相关产品推荐
相关产品推荐

