繁体   English   中英

SQLSTATE [HY000]:一般错误:2053

[英]SQLSTATE[HY000]: General error: 2053

我在PHP项目中随机收到此错误。 我正在使用Laravel框架。 我在Google上搜索了一下,发现这是由于PDO引起的问题。 我试图记录错误发生之前我要运行的查询,并且当我通过My​​SQL复制并运行相同的查询时,它运行得很好。 以下是代码段:

foreach($batches as $batch){
        $query_post = "INSERT INTO posts (`fb_post_id`, `page_id`, `from_user_id`,`to_user_id`, ".
                        "`object_id`, `from`,`to`, `message`, `picture`,`link`, `icon`, `type`,`name`, ".
                        "`status_type`, `privacy`,`caption`, `description`,`story`, `actions`, `created_time`, ".
                        "`comment_count`,`like_count`, `created_at`) VALUES ";
        $query = '';
        foreach($batch as $row){
            $comma_separated = implode("','", $row);
            $query .= "('".$comma_separated."'),";
        }
        $query_post .= $query;
        $query_post= substr($query_post, 0, -1);
        $query_post= utf8_encode($query_post);
        Log::write('info', ' POST QUERY : '.$query_post);
        DB::query($query_post);
    }

在循环中运行了几次之后,出现错误:SQLSTATE [HY000]:常规错误:laravel / database / connection.php第293行中的2053。如果有人可以给我一个合理的解决方案,那将是一个很大的帮助。

PS:几次跑步意味着一个随机数,并且在某些特定时间点不会发生。 我的PHP版本是5.3.10,我在5.4.4上也遇到了同样的错误。

采用:

DB::statement()而不是DB::query()

希望对您有帮助。

其实laravel建议的是对您的操作使用正确的语句

DB::delete()
DB::update()
DB::insert()
DB::select()

原因是因为statement()不返回受影响的行响应,而update,insert和delete会这样做

当然select会返回选定的结果集合,这将始终使您能够更好地记录和交互代码

祝你好运

那这个呢?

foreach($batches as $batch){
    $query_post = "INSERT INTO posts (`fb_post_id`, `page_id`, `from_user_id`,`to_user_id`, ".
                    "`object_id`, `from`,`to`, `message`, `picture`,`link`, `icon`, `type`,`name`, ".
                    "`status_type`, `privacy`,`caption`, `description`,`story`, `actions`, `created_time`, ".
                    "`comment_count`,`like_count`, `created_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
    Log::write('info', ' POST QUERY : '.$query_post);
    DB::query($query_post,$batch);
}

使用参数化查询可能会更好,并且可以解决问题……也许。 真的不知道您要传递给它的数据。

使用批判,而不是查询。 select返回选定的结果集合,这将始终使您能够更好地记录和交互代码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM