Laravel 在 PHP 一般错误:1366 Incorrect integer value

Posted

技术标签:

【中文标题】Laravel 在 PHP 一般错误:1366 Incorrect integer value【英文标题】:Laravel in PHP General error: 1366 Incorrect integer value 【发布时间】:2018-06-01 15:53:09 【问题描述】:
    $id = DB::table('utilisateur')
        ->select('idUtlstr')
        ->where('email','=',$request ->input("email"))
        ->get();

    DB::table('client')->insert(
        [
            'idClient' => $id, 
            'nbrSignl' => 0,
            'numPermis' => 0, 
            'quest1' => 'vide',
            'quest2' => 'vide',
            'quest3'=> 'vide',
            'datePermis' => '2000-01-01',
            'numCompte' => 0 ,
            'blocage' => 'non' 
        ]
    );

SQLSTATE[HY000]: 一般错误: 1366 不正确的整数值: '["idUtlstr":25]' for column 'idClient' at row 1 (SQL: insert into client (idClient, @987654324 @, numPermis, quest1, quest2, quest3, datePermis, numCompte, blocage) 值 (["idUtlstr":25], 0, 0, vide, vide, vide, 2000-01-01, 0, 非))

【问题讨论】:

看起来错误消息准确地显示了哪个 col 不是整数...您的问题是什么? 当我尝试将 $id 中的内容放入我的列 'idClient' ii 收到此错误时,我不明白如何从保存的 (idUtlstr) 中获取值 25在 $id 这是一个简单的对象数组。请参阅下面的@flash Thunder 的回答 这是我第一次做这个...thanx man 【参考方案1】:

这是因为$id 在您的数据库请求之后不是整数。您的查询返回一个元素集合对象,您需要正确获取它...

执行var_dump($id),你会看到它返回stdClass

在查询后使用:

$my_id = $id0->idUtlstr

并在第二个查询中使用该变量。

【讨论】:

所以任何执行查询的结果都是一个从中获取数据的数组,我将它视为一个数组对象!谢谢你救了我 如果数据库没有记录会怎样?? @aymenmedjader myid 将为空,第二个查询将不返回任何内容,但不应失败【参考方案2】:

试试看

$utilisateur = DB::table('utilisateur')
    ->select('idUtlstr')
    ->where('email',$request->input("email"))
    ->first();
if (!empty($utilisateur)) 
   $id = $utilisateur->idUtlstr;  
   $data = [
      'idClient' => $id, 
      'nbrSignl' => 0,
      'numPermis' => 0, 
      'quest1' => 'vide',
      'quest2' => 'vide',
      'quest3'=> 'vide',
      'datePermis' => '2000-01-01',
      'numCompte' => 0 ,
      'blocage' => 'non' 
   ];
   DB::table('client')->insert($data);

【讨论】:

这仍然不正确。 $id 仍将是一个对象数组并引发相同的错误。此外,答案应附有解释,而不仅仅是代码转储 但 $id 是一个数组,我无法将其放入 diracty 列中,因此我需要指出我想要获取的内容 ..thanx man check @flash answer 这是正确的 我使用 ->first() 方法而不是 ->get()。这个代码也是正确的@aymenmedjader 当你使用 get() 时它返回 Collection 实例,当它第一次返回单个数据时【参考方案3】:

使用这个,我希望它会起作用。

$id = DB::table('utilisateur')
            ->select('idUtlstr')
            ->where('email','=',$request ->input("email"))
            ->first();

        DB::table('client')->insert(
            [
                'idClient' => $id->idUtlstr, 
                'nbrSignl' => 0,
                'numPermis' => 0, 
                'quest1' => 'vide',
                'quest2' => 'vide',
                'quest3'=> 'vide',
                'datePermis' => '2000-01-01',
                'numCompte' => 0 ,
                'blocage' => 'non' 
            ]
        );

【讨论】:

【参考方案4】:

这是因为$id 是一个整数,而查询返回一个对象。例如,$id 值在您的数据库中等于 2,但查询将其返回为 '"id":2' 而不是 2

你应该做的是添加第二个变量来获取 id:

$myid = $id->id

这等于$myid = 2。然后您可以使用$myid 进行第二次查询,一切都会正常进行。

根据您的代码,这应该可以:

$id = DB::table('utilisateur')
    ->select('idUtlstr')
    ->where('email','=',$request ->input("email"))
    ->get();
    $myid = $id->id

DB::table('client')->insert(
    [
        'idClient' => $myid, 
        'nbrSignl' => 0,
        'numPermis' => 0, 
        'quest1' => 'vide',
        'quest2' => 'vide',
        'quest3'=> 'vide',
        'datePermis' => '2000-01-01',
        'numCompte' => 0 ,
        'blocage' => 'non' 
    ]
);

【讨论】:

以上是关于Laravel 在 PHP 一般错误:1366 Incorrect integer value的主要内容,如果未能解决你的问题,请参考以下文章

SQLSTATE[HY000]:一般错误:1366 整数值不正确:

think PHP6 保存到数据库的时候出现:SQL错误(1366):Incorrect String Value

Laravel 中正确字符和排序规则的 MySQL 设置

如何修复 laravel 中的 gettallheaders.php 错误?

LARAVEL 8:一般错误:使用外键运行迁移时发生 1005

“一般错误:1005 无法创建表”使用 Laravel 架构构建和外键