1

OK、私は混乱しています。データベースで(ローカルに)クエリを実行しようとしていますが、接続リセットエラーが発生し続けます。ジェネリックDAOクラスで以下のメソッドを使用して、クエリ文字列を作成し、Zend_DbAPIに渡します。

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)に設定されており、このフィールドの検証では、HTMLを使用した場合は1200を超え、HTMLを使用しない場合は800を超えるものは許可されません。

本当のキッカーは、このSQL文字列を取得してコマンドラインから実行すると、正常に機能することです。そのため、私は一生の間、何が問題なのかを理解できません。

サーバーパラメータを拡張しようとしました。つまり、 予期しない接続のリセット:PHPまたはApacheの問題ですか?

だから、一言で言えば、私は困惑しています。何か案は?

4

3 に答える 3

1

OK、この問題を経験している他の人にとっては-問題はZend_Db_Statementに関係している-というか、このコンポーネントが依存しているpregライブラリです。Zend Issue Tracker: http: //framework.zend.com/issues/browse/ZF-8399でフラグが立てられていますが、厳密にはZendlibの問題ではありません。サーバー環境によっては、この問題が発生する場合と発生しない場合があります。私の場合、このエラーは次の場合に発生しました。

Win XP、Wamp 2 PHP 5.3

を使用して解決できます

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

これは、アダプタ(PDOなど)を介してSQLを効果的に直接実行します。または、サーバーを変更してPCRE自体のsegfaultingを修正することもできます(ただし、これをどのように行うかは完全にはわかりません)。同じ問題を抱えている他の人の助けになることを願っています

于 2010-05-23T10:36:51.943 に答える
1

グーグルしていて、MySQLクエリを実行するときの接続リセットに関するこの投稿を見つけた人のために:

sunwukungからの回答とは別に、MySQL設定、特にこれにボトルネックがあるかどうかも確認してください。

max_allowed_packet = 1M

より大きな数値に変更できます。これが私のものです:

max_allowed_packet = 32M

今では動作します。

説明:

設定名からわかるように、接続のリセットは主に、MySQLへの接続を「終了」するMySQLに出入りするデータセットが大きすぎる結果です。

于 2014-11-13T02:49:55.003 に答える
0

正確なエラーメッセージを投稿できますか(PDOを使用している場合は$ this-> db-> errorInfo())?db接続が確立されていることを確認しますか?

于 2010-05-21T10:15:01.527 に答える