Php MySQL查询中的连接重置

Php MySQL查询中的连接重置,php,mysql,connection-reset,Php,Mysql,Connection Reset,好吧,我很困惑。 我试图在数据库(本地)上执行一个查询,但一直收到一个连接重置错误。我在一个通用DAO类中使用了下面的方法来构建查询字符串并传递给Zend_Db API public function insert($params) { $loop = false; $keys = $values = ''; foreach($params as $k => $v){ if($loop == true){ $keys .=

好吧,我很困惑。 我试图在数据库(本地)上执行一个查询,但一直收到一个连接重置错误。我在一个通用DAO类中使用了下面的方法来构建查询字符串并传递给Zend_Db API

public function insert($params) {
    $loop = false;
    $keys = $values = '';
    foreach($params as $k => $v){
        if($loop == true){
            $keys   .= ',';
            $values .= ',';
        }
        $keys   .= $this->db->quoteIdentifier($k);
        $values .= $this->db->quote($v);
        $loop = true;
    }

    $sql = "INSERT INTO " . $this->table_name . " ($keys) VALUES ($values)";

    //formatResult returns an array of info regarding the status and any result sets of the query
    //I've commented that method call out anyway, so I don't think it's that
    try {
        $this->db->query($sql);
        return $this->formatResult(array(
                true,
                'New record inserted into: '.$this->table_name
        ));
    }catch(PDOException $e) {
        return $this->formatResult($e);
    }
}
到目前为止,这一切都很好——自从我们生成新表来记录用户输入以来,错误一直在发生。插入字符串如下所示:

INSERT INTO tablename(`id`,`title`,`summary`,`description`,`keywords`,`type_id`,`categories`) VALUES ('5539','Sample Title','Sample content','
\'Lorem ipsum dolor sit amet, consectetur adipiscing elit. In et pellentesque mauris. Curabitur hendrerit, leo id ultrices pellentesque, est purus mattis ligula, vitae imperdiet neque ligula bibendum sapien. Curabitur aliquet nisi et odio pharetra tincidunt. Phasellus sed iaculis nisl. Fusce commodo mauris et purus vehicula dictum. Nulla feugiat molestie accumsan. Donec fermentum libero in risus tempus elementum aliquam et magna. Fusce vitae sem metus. Aenean commodo pharetra risus, nec pellentesque augue ullamcorper nec. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nullam vel elit libero. Vestibulum in turpis nunc.\'','this,is,a,sample,array',1,'category title') 
以下是在组装查询(var\u dump)之前获得的参数:

数组
'id'=>字符串'1'(长度=4)
“title”=>string“示例标题”(长度=12)
“摘要”=>string“示例内容”(长度=14)
“description'=>string''Lorem ipsum dolor sit amet,Concertetur adipsicing elit。在佩伦茨克和莫里斯。库拉比图尔·亨德雷特、利奥·艾德莱克斯·佩伦茨克、马蒂斯·利古拉、比本杜姆·利古拉的生命。这是一个很好的例子。菲舍勒斯·塞德·亚库利斯·尼塞尔。这句话的意思是:毛里斯和普卢斯。不允许有封建性骚扰。在里苏斯·坦普斯·阿利奎姆和麦格纳的元素中进行自由发酵。这是我的生活。埃尼安·康莫多·法雷特拉·里苏斯,nec佩伦茨克·奥古斯。。。(长度=677)
'keywords'=>string'this,is,a,sample,array'(长度=22)
'type_id'=>int 1
“类别”=>string“类别标题”(长度=43)
下一个调用端口是检查表上的限制,因为如果“description”的长度在300标记左右(在310-330之间变化),它似乎会插入。字段限制设置为VARCHAR(1500),并且此字段上的验证将不允许任何大于1200的内容(带有HTML)和大于800的内容(不带HTML)

真正重要的是,如果我使用这个sql字符串并通过命令行执行它,它工作得很好——因此我一辈子都无法找出哪里出了问题

我已尝试扩展服务器参数,即。


所以,简而言之,我被难住了。有什么想法吗?

你能发布准确的错误消息吗($this->db->errorInfo(),如果你使用PDO)?
是否确实建立了db连接?

好的,对于遇到此问题的任何其他人-问题与Zend_db_语句有关-或者与此组件所依赖的preg库有关。Zend问题跟踪器中已经标记了它,但严格来说,Zend lib并没有问题。根据您的服务器环境,您可能会遇到此问题,也可能不会遇到此问题。在我的情况下,此错误发生在:

赢得XP, Wamp 2 PHP5.3

它可以通过使用

db->getConnection()->exec($sql)

它通过适配器(PDO等)直接有效地执行sql。或者,您可以修改您的服务器,以纠正PCRE本身的错误(尽管我承认我不完全确定您将如何处理)。希望这能帮助其他有同样问题的人

在谷歌上搜索并找到这篇关于MySQL查询时连接重置的帖子:

除了孙武功的回答外,还请检查您的MySQL设置是否存在瓶颈,尤其是这个:

max_allowed_packet = 1M
您可以将其更改为更大的数字。这是我的:

max_allowed_packet = 32M
现在它起作用了

说明:


从设置名称中可以看出,连接重置主要是由于进出MySQL的数据集太大,“终止”了与MySQL的连接。

连接正在重置,因此我没有任何脚本输出,如果将PDO::ERRMODE_SILENT设置为false会怎么样?不,仍然会死掉。如果我创建了一个新的PDO实例,这很好,只要它碰到Zend_API就会被破坏。我刚刚在Zend Framework问题跟踪器上找到了一个相同的bug-通过简单的PDO/MySQL调用,这很好-所以这是Zend中的一些东西。非常感谢,帮助了我!:)顺便说一句,这应该是
$db->getConnection()->exec($sql)
max_allowed_packet = 32M