SQLSTATE [HY000]:一般错误:2053

Posted

技术标签:

【中文标题】SQLSTATE [HY000]:一般错误:2053【英文标题】:SQLSTATE[HY000]: General error: 2053 【发布时间】:2012-10-25 14:47:28 【问题描述】:

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

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。 如果有人能给我一个合理的解决方案,那将是一个很大的帮助。

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

【问题讨论】:

根据this,如果使用Larevel 3.0,你应该使用DB::statement而不是DB::query mysql 错误 2053:“尝试在没有与语句关联的结果集时读取一行”。您使用错误的查询调用来运行插入。 为什么不使用他们的 ORM 呢?错误可能更少。 另外,如果 $comma_separated 中有引号怎么办? don'tcan't 如果它在消息或其他内容中,则会将其丢弃。 @TimWithers :我只是忘了提及它,但 $batches 中的所有字符串都已使用 mysql_real_escape_string() 和 base64_encode() 函数正确转义和编码。 【参考方案1】:

用途:

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

希望对你有帮助。

【讨论】:

【参考方案2】:

其实 laravel 的建议是为你的操作使用正确的语句

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

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

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

祝你好运

【讨论】:

【参考方案3】:

这个呢?

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

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

【讨论】:

【参考方案4】:

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

【讨论】:

欢迎来到 SO。请阅读此how-to-answer 以提供高质量的答案。

以上是关于SQLSTATE [HY000]:一般错误:2053的主要内容,如果未能解决你的问题,请参考以下文章

SQLSTATE [HY000]:一般错误:1364 字段“标题”没有默认值

SQLSTATE [HY000]:一般错误:2053

PDO 错误:SQLSTATE [HY000]:一般错误:2031

SQLSTATE[HY000]:一般错误:在 Laravel 中迁移期间出现 1005

SQLSTATE [HY000]:一般错误:1364 字段 'uID' 没有默认值

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