我在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]:一般错误:laravel / database / connection.php第293行中的2053。 如果有人能给我一个合理的解决方案,那将是一个很大的帮助。
P.S。:一些运行意味着一个随机数,它不会在某个特定点发生。我的PHP版本是5.3.10,我在5.4.4上也有同样的错误。
答案 0 :(得分:3)
使用:
DB::statement()
代替DB::query()
希望对你有所帮助。
答案 1 :(得分:3)
实际上,laravel建议使用正确的操作语句
DB::delete()
DB::update()
DB::insert()
DB::select()
原因是因为statement()没有返回受影响的行响应 更新,插入和删除
当然选择返回选定的结果集合,这将始终允许您更好地记录和插入代码
祝你好运
答案 2 :(得分: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);
}
使用参数化查询可能会更好并解决问题......也许。真的不知道你传入的数据。
答案 3 :(得分:-1)
使用excute,而不是查询。 select返回选定的结果集合,这将始终允许您更好地记录和插入代码