Laravel 5.7 PHP7.2 MySQL5.7 遇到的一个奇怪的问题.

抱歉,是我马虎了,之前是另一个错误提示,提示字段 username 不存在,然后我给字段值加上 ' 就可以了,发问题的时候没发现. 我看看能不能重现那个问题。这个问题确实是字段长度不够.谁先回答的最佳答案就给谁了,抱歉了各位

开发环境
Windows , laravel 5.7 , php7.2, mysql5.7
问题描述:
保存数据的时候sql语句报错,所有的字符串字段的值都没有加引号,都是这样: company= 百度 , 数据无法插入.
手动修改了一下代码(HasAttributes中的setAttribute,将$this->attributes[$key] = $value改为$this->attributes[$key] = "'".$value."'";),插入/更新数据的时候没有问题了.但是不知道会不会有其他隐患.
最主要的是不知道为什么会出这样的问题.以前用think的时候也是数组作为参数的,也是正常.

model如下:

class Company extends Model
{
    //定义模型关联数据表
    protected  $table='company';
    //定义主键
    protected $primaryKey='id';
    //定义禁止操作时间
    public $timestamps=false;
    //设置允许写入的数据字段
    //protected  $fillable=[''];
    //设置不允许写入的数据字段
    protected  $guarded=[''];
    public function companyuser(){
        return $this->hasMany('App\Model\CompanyUser','companyid','id');
    }
}

控制器方法如下:

public function companyAdd(){
        $company=Input::all();
        unset($company['_token']);
        $company['register_time']=time();
        $company['password']=md5($company['repass'] . ($salt = $company['register_time']));
        unset($company['repass']);
        $data=Company::create($company);
        return "{\'message\':$data!=null?\'success\':\'error\'}";
    }

错误提示:

message: "SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'username' at row 1 (SQL: insert into `company` (`username`, `usercode`, `company_name`, `belong_leader`, `reverimg`, `audit`, `register_time`, `password`) values (111111111111, 经理, 1231212123123, 1, /uploadfile/20190815/1565852747undefined.jpg, 1, 1565852773, 8a9e3ceb7b28de854d7235a886e0745a))"

表结构如下:

CREATE TABLE IF NOT EXISTS `company` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(11) DEFAULT NULL,
  `usercode` varchar(10) DEFAULT NULL,
  `password` varchar(50) DEFAULT NULL,
  `company_name` varchar(40) DEFAULT NULL,
  `frontimg` varchar(50) DEFAULT NULL,
  `reverimg` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
  `belong_leader` int(11) DEFAULT NULL,
  `audit` tinyint(4) DEFAULT NULL,
  `register_time` bigint(20) DEFAULT NULL,
  `phone` char(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4 COMMENT='公司表' AUTO_INCREMENT=6 ;

抱歉,是我马虎了,之前是另一个错误提示,提示字段username不存在, 我看看能不能重现那个问题.这个问题确实是字段长度不够

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

。。。 name 你设置的 长度是多少 过长了 报错了

4年前 评论
讨论数量: 13

看一下严格模式, 还有我很好奇你代码是什么样的. 能报这种错..

4年前 评论
kofjjj (楼主) 4年前
wanghan

贴出来sql看看

4年前 评论
kofjjj (楼主) 4年前
wanghan

如果你是用的DB::connection($a)->table($b)->insert("........name=百度")
这样是不会加引号的需要写成...->insert("........name='{$target}'")

4年前 评论
kofjjj (楼主) 4年前
wanghan (作者) 4年前
wanghan (作者) 4年前
wanghan (作者) 4年前
kofjjj (楼主) 4年前
kofjjj (楼主) 4年前
nfangxu

App\Providers\AppServiceProvider 下的 boot() 添加 \Schema::defaultStringLength(191); 试试

4年前 评论
kofjjj (楼主) 4年前

mysql的问题,你把my.ini中
sql-mode=”STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION” ,中的STRICT_TRANS_TABLES去掉试试

4年前 评论
kofjjj (楼主) 4年前
kilogi (作者) 4年前
kofjjj (楼主) 4年前
Kevin_metnick

你可以打印一下你的sql 像是用 toSql() 先看下 生成的sql是什么 , 如果sql没问题 那就应该是楼上老兄说的MySQL配置上出了问题

4年前 评论
kofjjj (楼主) 4年前

。。。 name 你设置的 长度是多少 过长了 报错了

4年前 评论

兄弟,表结构 name 长度不够,

4年前 评论
superwen

file

company_name 表结构是int型? 如果是int超过默认是11位长度了也。

4年前 评论
allen9009

报错信息不是写了username长度问题么

4年前 评论

多看看报错信息,已经提示的很清楚了

4年前 评论

"SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'username' at row 1 (SQL: insert into company (username, usercode, company_name, belong_leader, reverimg, audit, register_time, password) values (111111111111, 经理, 1231212123123, 1, /uploadfile/20190815/1565852747undefined.jpg, 1, 1565852773, 8a9e3ceb7b28de854d7235a886e0745a))"

------- username 太长, 你设置的是11,你实际的值是 12 (Data too long for column 'username' at row 1)

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!