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 line 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 に答える