【问题标题】:Mysql: General error incorrect integer valueMysql:一般错误不正确的整数值
【发布时间】:2018-02-06 13:19:06
【问题描述】:

我知道这个问题已经有人问过了,但我找不到好的答案。

视图如下:

@foreach ($projects as $key => $project)
                    <tr id="{{$project->id}}">
                      <td>{{$project->id}}</td>
                      <td>{{$project->slug}}</td>
                      <td>{{$project->order}}</td>
                      <td>{{$project->public}}</td>
                      <td><a href="{{ route('admin.projects.show', $project->id)}}" class="btn btn-info btn-sm">View</a> <a href="{{ route('admin.project.edit', $project->id)}}" class="btn btn-success btn-sm">Edit</a></td>
                    </tr>
@endforeach

Ajax 代码如下:

$("tbody").sortable({
    items: "> tr",
    appendTo: "parent",
    helper: "clone",
    update: function( event, ui ) {
        let newOrder = $(this).sortable('toArray');
        $.ajax({
            type: "POST",
            url:'/admin/projects/updateOrder',
            data: {ids: newOrder}
        })
       .done(function( msg ) {
            // render table with new order?
       });
    }
}).disableSelection();

控制器功能如下:

public function updateOrder(Request $request)
    {
        $ids = $request->ids;
        // en el array ids, los "keys" serían el orden, los cuales puedes modificar según lo que requieras

        $caseQuery = 'CASE id ';
        foreach ($ids as $order => $id) {
            $caseQuery .= "WHEN $id THEN $order ";
        }
        $caseQuery .= ' END CASE';
            DB::table('projects')
                ->whereIn('id', $ids)
                ->update(['order' => $caseQuery]);
    }    

错误:

SQLSTATE[HY000]: General error: 1366 Incorrect integer value: 'CASE 
id WHEN 2 THEN 0 WHEN 3 THEN 1 WHEN 1 THEN 2 WHEN 4 THEN 3 WHEN 5 
THEN 4 WHEN 6 THEN 5 WHEN 7 THEN 6 WHEN 8 THEN 7 WHEN 9 T' for column 
'order' at row 1 (SQL: update `projects` set `order` = CASE id WHEN 2 
THEN 0 WHEN 3 THEN 1 WHEN 1 THEN 2 WHEN 4 THEN 3 WHEN 5 THEN 4 WHEN 6 
THEN 5 WHEN 7 THEN 6 WHEN 8 THEN 7 WHEN 9 THEN 8 WHEN 10 THEN 9 WHEN 
11 THEN 10 WHEN 12 THEN 11 WHEN 13 THEN 12 WHEN 14 THEN 13 WHEN 15 
THEN 14 WHEN 16 THEN 15 WHEN 17 THEN 16 WHEN 18 THEN 17 WHEN 19 THEN 
18 WHEN 20 THEN 19 WHEN 21 THEN 20 WHEN 22 THEN 21 WHEN 23 THEN 22 
WHEN 24 THEN 23 WHEN 25 THEN 24 WHEN 26 THEN 25 WHEN 27 THEN 26 WHEN 
28 THEN 27 WHEN 29 THEN 28 END CASE where `id` in (2, 3, 1, 4, 5, 6, 
7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 
25, 26, 27, 28, 29))

¿有人知道我为什么会收到此错误吗?

此代码用于在我拖放时更新值。

谢谢。

更新

控制器功能现在如下所示:

public function updateOrder(Request $request)
    {
        $ids = $request->ids;
        // en el array ids, los "keys" serían el orden, los cuales puedes modificar según lo que requieras

        $caseQuery = 'CASE';
        foreach ($ids as $order => $id) {
            $caseQuery .= "WHEN id = $id THEN $order ";
        }
        $caseQuery .= 'ELSE null';
        $caseQuery .= ' END';
            DB::table('projects')
                ->whereIn('id', $ids)
                ->update(['order' => $caseQuery]);

    }

我在 laravel.log 上发现的错误是这样的:

Next Illuminate\Database\QueryException: SQLSTATE[HY000]: General 错误:1366 不正确的整数值:'CASEWHEN id = 26 THEN 0 WHEN id = 23 THEN 1 WHEN id = 19 THEN 2 WHEN id = 25 THEN 3 WHEN id = 27 THEN 4 WHEN id = 18 THEN 5 WHEN' 用于第 1 行的列“order”(SQL:更新 projects 设置 order = CASEWHEN id = 26 THEN 0 当 id = 23 THEN 1 当 id = 19 然后 2 当 id = 25 然后 3 当 id = 27 然后 4 当 id = 18 然后 5 当 id = 28 然后 6 当 id = 14 然后 7 当 id = 24 然后 8 当 id = 20 THEN 9 当 id = 12 THEN 10 当 id = 13 THEN 11 当 id = 17 THEN 12 当 id = 29 THEN 13 当 id = 15 THEN 14 当 id = 21 THEN 15 当 id = 16 THEN 16 当 id = 22 THEN 17 当 id = 4 THEN 18 当 id = 3 然后 19 当 id = 1 然后 20 当 id = 6 然后 21 当 id = 9 THEN 22 当 id = 8 THEN 23 当 id = 5 THEN 24 当 id = 2 THEN 25 当 id = 10 那么 26 当 id = 11 那么 27 当 id = 7 那么 28 否则 null END where id in (26, 23, 19, 25, 27, 18, 28, 14, 24, 20, 12, 13, 17, 29, 15, 21, 16, 22, 4, 3, 1, 6, 9, 8, 5, 2, 10, 11, 7)) /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Database/Connection.php:647 堆栈跟踪: #0 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Database/Connection.php(607): Illuminate\Database\Connection->runQueryCallback('update project...', Array, Object(Closure)) #1 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Database/Connection.php(477): Illuminate\Database\Connection->run('updateproject...', Array, 对象(闭包)) #2 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Database/Connection.php(416): Illuminate\Database\Connection->affectingStatement('更新 project...', Array) #3 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2152): Illuminate\Database\Connection->update('updateproject...',数组) #4 /home/vagrant/Code/Manifiesto/app/Http/Controllers/AdminController.php(141): 照亮\数据库\查询\生成器->更新(数组) #5【内部函数】:App\Http\Controllers\AdminController->updateOrder(Object(Illuminate\Http\Request)) #6 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(55): call_user_func_array(数组,数组) #7 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(44): Illuminate\Routing\Controller->callAction('updateOrder', Array) #8 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Route.php(203): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), 对象(App\Http\Controllers\AdminController),'updateOrder') #9 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Route.php(160): 照亮\路由\路由->runController() #10 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Router.php(574): 照亮\路由\路由->运行() #11 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\Routing\Router->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #12 /home/vagrant/Code/Manifiesto/vendor/vsch/laravel-translation-manager/src/RouteAfterMiddleware.php(21): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #13 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Vsch\TranslationManager\RouteAfterMiddleware->handle(Object(Illuminate\Http\Request), 对象(闭包)) #14 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #15 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(41): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #16 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Routing\Middleware\SubstituteBindings->handle(Object(Illuminate\Http\Request), 对象(闭包)) #17 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #18 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php(43): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #19 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Auth\Middleware\Authenticate->handle(Object(Illuminate\Http\Request), 对象(关闭),“管理员”) #20 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #21 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(65): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #22 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), 对象(闭包)) #23 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #24 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #25 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\View\Middleware\ShareErrorsFromSession->handle(Object(Illuminate\Http\Request), 对象(闭包)) #26 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #27 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #28 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), 对象(闭包)) #29 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #30 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #31 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), 对象(闭包)) #32 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #33 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(59): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #34 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Cookie\Middleware\EncryptCookies->handle(Object(Illuminate\Http\Request), 对象(闭包)) #35 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #36 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(102): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #37 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Router.php(576): 照亮\管道\管道->然后(对象(闭包)) #38 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Router.php(535): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), 对象(照亮\Http\Request)) #39 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Router.php(513): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request)) #40 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(176): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request)) #41 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http{closure}(Object(Illuminate\Http\Request)) #42 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(30): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #43 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), 对象(闭包)) #44 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #45 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(30): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #46 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), 对象(闭包)) #47 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #48 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #49 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle(Object(Illuminate\Http\Request), 对象(闭包)) #50 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #51 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(46): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #52 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), 对象(闭包)) #53 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request)) #54 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(102): Illuminate\Routing\Pipeline->Illuminate\Routing{closure}(Object(Illuminate\Http\Request)) #55 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(151): 照亮\管道\管道->然后(对象(闭包)) #56 /home/vagrant/Code/Manifiesto/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(116): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request)) #57 /home/vagrant/Code/Manifiesto/public/index.php(53): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request)) #58 {主}

【问题讨论】:

  • 检查我期望的原始查询不是您想要的。
  • 如何进行调试?我尝试使用 ->toSql() 但我认为我做不到,因为我没有 get() 查询。
  • 您在 CASE 之前缺少 order 的值。
  • 尝试在查询之前使用DB::connection()-&gt;enableQueryLog() 启用调试,然后使用$s = DB::getQueryLog() 并将$s 写入日志。它将与参数绑定一起输出。
  • @KikoSoftware 如果可以,请使用代码发布答案。

标签: php mysql sql laravel


【解决方案1】:

由于空格,您正在错误地构建 SQL。

这段代码

$caseQuery = 'CASE';
foreach ($ids as $order => $id) {
    $caseQuery .= "WHEN id = $id THEN $order ";
}

正在生成一条 SQL 语句

CASEWHEN id = 26 ...

改成

$caseQuery = 'CASE ';
foreach ($ids as $order => $id) {
    $caseQuery .= " WHEN id = $id THEN $order ";
}

你会得到

CASE WHEN id = 26 ...

注意:您必须为整个查询执行此操作。

【讨论】:

  • 我正在查看您的代码并且看起来相同,对吗?也许你不编辑它。
  • 该死的,我刚刚检查了错误,这是真的。看起来像 CASEWHEN。必须修改哪一行?
  • @LluísPuigFerrer,我停下来指出错误。我没有浏览你所有的代码。然而,我给了你一个例子(使用'CASE'而不是'CASE'。你必须自己完成剩下的。
  • 您说的是使用“CASE”而不是“CASE”。我不明白你想说什么..
  • 好的.. CASE 后面的空格。
【解决方案2】:

试试这个,然后在你的应用中检查你的日志。

我在WHEN claus 上添加了id(但如果它的一些其他变量将其更改为适当的)

UPDATE `projects` SET `order` = 
     CASE
            WHEN id = 2 THEN 0
            WHEN id = 3 THEN 1
            WHEN id = 1 THEN 2
            WHEN id = 4 THEN 3
            WHEN id = 5 THEN 4
            WHEN id = 6 THEN 5
            WHEN id = 7 THEN 6
            WHEN id = 8 THEN 7
            WHEN id = 9 THEN 8
            WHEN id = 10 THEN 9
            WHEN id = 11 THEN 10
            WHEN id = 12 THEN 11
            WHEN id = 13 THEN 12
            WHEN id = 14 THEN 13
            WHEN id = 15 THEN 14
            WHEN id = 16 THEN 15
            WHEN id = 17 THEN 16
            WHEN id = 18 THEN 17
            WHEN id = 19 THEN 18
            WHEN id = 20 THEN 19
            WHEN id = 21 THEN 20
            WHEN id = 22 THEN 21
            WHEN id = 23 THEN 22
            WHEN id = 24 THEN 23
            WHEN id = 25 THEN 24
            WHEN id = 26 THEN 25
            WHEN id = 27 THEN 26
            WHEN id = 28 THEN 27
            WHEN id = 29 THEN 28
        ELSE ?
        END
    WHERE id in (2, 3, 1, 4, 5, 6,7, 8,
                 9, 10, 11, 12, 13, 14, 
                 15, 16, 17, 18, 19,20, 
                 21, 22, 23, 24, 25, 26, 
                 27, 28, 29)

所以改变这个

$caseQuery = 'CASE id ';
        foreach ($ids as $order => $id) {
            $caseQuery .= "WHEN $id THEN $order ";
        }
        $caseQuery .= ' END CASE';
            DB::table('projects')
                ->whereIn('id', $ids)
                ->update(['order' => $caseQuery]);

到这里:

$caseQuery = 'CASE';
        foreach ($ids as $order => $id) {
            $caseQuery .= "WHEN id = $id THEN $order ";
        }
        $caseQuery .= 'ELSE null';
        $caseQuery .= ' END';
            DB::table('projects')
                ->whereIn('id', $ids)
                ->update(['order' => $caseQuery]);

【讨论】:

  • 我认为它有效,日志上没有错误。如何将其传递给 laravel 查询?
  • 检查我更新的答案,如果它回答了您的问题,请接受它
  • 你认为我们可以解决这个问题?貌似是laravel sql的错误
  • 你能在日志文件中发布整个消息和你的错误吗?
  • 当然可以。整个信息都在这个问题上。给我几分钟看看日志文件在哪里:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多