好的,我是flummoxed(我已经问了这个问题在堆栈也是 – 但我需要得到它的固定,所以我也在这里问 – 任何帮助是非常赞赏)我试图执行查询数据库(本地),我不断收到连接重置错误。 我一直在通用的DAO类中使用下面的方法来构build一个查询string并传递给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); } }
到目前为止,这一直运行良好 – 错误已经发生,因为我们生成新的表来logging用户input。 插入string如下所示:
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),对此字段的validation将不允许任何超过1200的HTML,而不包含800。
真正的动力是,如果我把这个SQLstring,并通过命令行执行它,它工作正常 – 所以我不能为我的生活找出什么是错的。
我试过扩展服务器参数,即https://stackoverflow.com/questions/1964554/unexpected-connection-reset-a-php-or-an-apache-issue
所以,简而言之,我很难过。 有任何想法吗?
如果生成的SQL在复制/粘贴时起作用,那么我会非常想知道这是您的代码的问题。
我有一个类似的DB类,如果发生SQL错误,它会将logging插入到日志表中。 我曾经修改过例程,并且做了类似于你描述的东西,因为它产生了一个SQL错误,它调用了函数,它产生了一个SQL错误,它调用了函数….你得到的想法:)
你的$this->db->query($sql); 函数呢? 可能值得看看是否有类似的东西,或者只是做一个直接的mysql_query
好的,对于遇到这个问题的其他人来说,问题就出在Zend_Db_Statement上 – 或者说这个组件依赖的preg库。 它已经被标记在Zend问题跟踪器中: http : //framework.zend.com/issues/browse/ZF-8399 ,但它并不严格是Zend库的问题。 根据您的服务器环境,您可能会也可能不会遇到此问题。 在我的情况下,这个错误发生在:
Win XP,Wamp 2 PHP 5.3
它可以通过使用来解决
db->getConnection>exec($sql)
它通过适配器(PDO等)直接有效地执行sql。 或者,你可以修改你的服务器来纠正PCRE本身的问题(尽pipe我承认我不完全确定你会怎么做)。 希望能帮助其他人解决同样的问题
你有没有试过看MySQL的错误日志? 当MySQL客户端和服务器版本不匹配时,我也看到了这个错误(5,5.x客户端到5.0,x服务器等),而且您正在执行的服务器版本中无效的查询,但对当前客户端有效版。 如果是这样的话,我会检查,以确保您使用的Zend API的版本与您正在使用的MySQL服务器版本兼容。 服务器上的MySQL错误日志应该至less让你陷入服务器崩溃或客户端。