1

好吧,我糊涂了。我正在尝试对数据库(本地)执行查询,但我不断收到连接重置错误。我一直在通用 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_dump) 之前获取的参数:

array
    'id' => string '1' (length=4)
    'title' => string 'Sample Title' (length=12)
    'summary' => string 'Sample content' (length=14)
    'description' => string '<p>'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'... (length=677)
    'keywords' => string 'this,is,a,sample,array' (length=22)
    'type_id' => int 1
    'categories' => string 'category title' (length=43)

下一个停靠点是检查表的限制,因为如果“描述”的长度在 300 左右(它在 310 - 330 之间变化),它似乎会插入。字段限制设置为 VARCHAR(1500) 并且该字段的验证不允许超过 1200 的 HTML 超过 800 的内容。

真正的问题是,如果我使用这个 sql 字符串并通过命令行执行它,它可以正常工作 - 所以我一辈子都无法弄清楚出了什么问题。

我尝试过扩展服务器参数,即 意外连接重置:PHP 或 Apache 问题?

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

4

3 回答 3

1

对于那些在谷歌上搜索并在执行 MySQL 查询时找到有关连接重置的帖子的人:

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

max_allowed_packet = 1M

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

max_allowed_packet = 32M

现在它起作用了。

解释:

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

于 2014-11-13T02:49:55.003 回答
1

好的,对于遇到此问题的任何其他人 - 问题与 Zend_Db_Statement 有关 - 或者更确切地说是该组件所依赖的 preg 库。它已在 Zend 问题跟踪器中标记:http://framework.zend.com/issues/browse/ZF-8399,但严格来说它不是 Zend 库的问题。根据您的服务器环境,您可能会也可能不会遇到此问题。就我而言,此错误发生在:

赢 XP, Wamp 2 PHP 5.3

它可以通过使用来解决

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

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

于 2010-05-23T10:36:51.943 回答
0

您能否发布确切的错误消息(如果您使用 PDO,则为 $this->db->e​​rrorInfo())?你确定你已经建立了数据库连接吗?

于 2010-05-21T10:15:01.527 回答