2

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

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]: General error: 2053 in laravel/database/connection.php 第 293 行。如果有人能给我一个合理的解决方案,那将是一个很大的帮助。

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

4

4 回答 4

3

Use:

DB::statement() instead of DB::query()

Hope it help you.

于 2015-01-09T10:24:43.623 回答
3

实际上,laravel 建议的是使用正确的语句进行操作

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

原因是因为 statement() 不返回更新、插入和删除的受影响行响应

当然 select 返回选定的结果集合,这将始终允许您更好地记录和解释您的代码

祝你好运

于 2016-06-05T08:07:44.557 回答
0

那这个呢?

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);
}

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

于 2012-11-05T18:20:19.470 回答
-1

使用执行,而不是查询。select 返回选定的结果集合,这将始终允许您更好地记录和解释您的代码

于 2017-04-24T10:30:38.233 回答