2016-10-14 4 views
-1

PHPでmysqlデータベースとPDOを接続しようとしています。すべてが自己構築された腕のシステム上にある。CC PHP - > Mysql dbへの接続が中止されました:エラーメッセージ

私はPHPで私のSQLを照会した場合:

$sql="SELECT volume FROM measurements ORDER BY ID DESC LIMIT 1;"; 

はすべて正常に動作しますが、私は、追加項目を追加する場合は、のような:

$sql="SELECT volume , temp , humidity FROM measurements ORDER BY ID DESC LIMIT 1;"; 

は私空白のページを取得。すべての、私のMySQLサーバは、このにErrorMessageをもたらす任意のエラーメッセージ

を持っていないだろう、>

  • 同じウェブサーバのlighttpd -

    • PHPログは
    • はPHPの追加のエラー・メッセージをアクティブにエラーを示しません私のウェブページを開こうとすると時間があります: 2015-03-31T22:09:09.886345Z 26 [注]接続が中断されましたXXX:データベース: 'user'ホスト: 'localhost'(通信パケットを読み取る際にエラーが発生しました)

      もし私がnetstat -a | grepのmysqlの は彼らが私のようなのmysqlから多くのオープンな接続を示しています。

      TCPを0 0はlocalhost:49050はlocalhost:mysqlのTIME_WAIT

      これは私の最小限のPHPコードです:

      <?php 
      ini_set('display_errors', 'On'); 
      error_reporting(E_ALL | E_STRICT); 
      
      try { 
          $conn = new PDO("mysql:host=127.0.0.1;dbname=fair_database", "root", "12345"); 
          // set the PDO error mode to exception 
          $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
      $sql="SELECT volume , temp , humidity, co2, pressure FROM measurements ORDER BY ID DESC LIMIT 1;"; 
      
          foreach ($conn->query($sql) as $row) { 
           $first_volume = number_format ($row['volume'],1); 
           $first_temp = number_format ($row['temp'],1); 
           $first_humidity = number_format ($row['humidity'],1); 
           $first_co2 = number_format ($row['co2'],1); 
           $first_pressure = number_format ($row['pressure'],0); 
          } 
           $conn=null; 
          } 
      catch(PDOException $e) 
          { 
           echo "Connection failed: " . $e->getMessage(); 
          } 
      ?> 
      

      と追加のデバッグ用:

      <?php 
      
      // ---------------------------------------------------------------------------------------------------- 
      // - Display Errors 
      // ---------------------------------------------------------------------------------------------------- 
      ini_set('display_errors', 'On'); 
      ini_set('html_errors', 0); 
      
      // ---------------------------------------------------------------------------------------------------- 
      // - Error Reporting 
      // ---------------------------------------------------------------------------------------------------- 
      error_reporting(-1); 
      
      // ---------------------------------------------------------------------------------------------------- 
      // - Shutdown Handler 
      // ---------------------------------------------------------------------------------------------------- 
      function ShutdownHandler() 
      { 
          if(@is_array($error = @error_get_last())) 
          { 
           return(@call_user_func_array('ErrorHandler', $error)); 
          }; 
      
          return(TRUE); 
      }; 
      
      register_shutdown_function('ShutdownHandler'); 
      
      // ---------------------------------------------------------------------------------------------------- 
      // - Error Handler 
      // ---------------------------------------------------------------------------------------------------- 
      function ErrorHandler($type, $message, $file, $line) 
      { 
          $_ERRORS = Array(
           0x0001 => 'E_ERROR', 
           0x0002 => 'E_WARNING', 
           0x0004 => 'E_PARSE', 
           0x0008 => 'E_NOTICE', 
           0x0010 => 'E_CORE_ERROR', 
           0x0020 => 'E_CORE_WARNING', 
           0x0040 => 'E_COMPILE_ERROR', 
           0x0080 => 'E_COMPILE_WARNING', 
           0x0100 => 'E_USER_ERROR', 
           0x0200 => 'E_USER_WARNING', 
           0x0400 => 'E_USER_NOTICE', 
           0x0800 => 'E_STRICT', 
           0x1000 => 'E_RECOVERABLE_ERROR', 
           0x2000 => 'E_DEPRECATED', 
           0x4000 => 'E_USER_DEPRECATED' 
          ); 
      
          if([email protected]_string($name = @array_search($type, @array_flip($_ERRORS)))) 
          { 
           $name = 'E_UNKNOWN'; 
          }; 
      
          return(print(@sprintf("%s Error in file \xBB%s\xAB at line %d: %s\n", $name, @basename($file), $line, $message))); 
      }; 
      
      $old_error_handler = set_error_handler("ErrorHandler"); 
      
      // other php code 
      ?> 
      

      結果は同じで、空白のページだけでPHPエラーはありません。他のエラーは、PHPエラーログファイルでは正常にログになります。 :-(

      私は最大のパッケージを拡大し、MySQLからの時間を待って、何も助けしようとしていどのような私はこのケースで行うことができます

      編集ありがとうござい :私は変更何多くの障害を発見?私の問題を見つける

  • +0

    正しく動作するかどうかをこのコードから予測しますか? –

    +0

    pdo(msqliはサポートされていません)でデータベースを照会し、ボリューム、温度、湿度、二酸化炭素と圧力から最後の値を取得します。これを変数に保存し、後で私のウェブサイトにエコーします。 Mysqlコンソールで、私のクエリをうまく動作させてください: mysql>ボリューム、温度、湿度からSELECTを選択してください。ORDER BY ID DESC LIMIT 1; + -------- + ------ + ---------- + |ボリューム|一時|湿度| + -------- + ------ + ---------- + | 59.76 | 1.88 | 13.7 | + -------- + ------ + ---------- + セット内の1行(0.00秒) –

    +0

    @ MarkusF。、あなたの例から、 '$ first_co2 = number_format($ row ['co2']、1);'しかし、あなたはselectクエリで 'co2'を宣言していません。 – andrew

    答えて

    0

    あなたのアプリケーションはLinux上で動作しますか?これは、アプリケーションが接続を頻繁に作成して終了する場合に起こる可能性があります接続を閉じるにはいくつかの手順が必要です。 MySqlは、必要なTCPハンドシェイクをしばらく待つ。

    MySql max_connectionsを増やしてみると、接続の余地が増えます。問題がまだ存在する場合、一方のアプリケーションが正常に接続を処理するかどうかを確認してください

    net.ipv4.tcp_fin_timeout = 30 
    net.ipv4.tcp_tw_recycle = 1 
    

    /etc/sysctl.confの

    にカーネルパラメータを次のように調整してみてください。

    +0

    ありがとうございました。はい、私のPHPアプリケーションは、Linuxシステム上で実行されます。 Phpは毎秒データベースに問い合わせる必要があります(1人のクライアントのみ、他のクライアントは計画していません)。私は最大限の接続を増やし、システムを再起動しました。再起動後、ウェブサイトには5分以上の読み込みと読み込みが行われます。 /etc/sysctl.confのipv4設定を変更した後。私のシステムはすべてのhttp reqestを拒否します(ERR_CONNECTION_REFUSED) –

    +0

    詳細なエラーメッセージが表示されますか? mysqlプロンプトで "show processlist"を実行すると、設定したmax_connectionsと大きく異なる接続数が表示されますか?次のコマンドの結果はあなたが設定したmysql接続の数にいくらか等しいですか? "netstat -nt | grep TIME_WAIT | grep 3306 | wc -l" – Aruna

    +0

    /etc/sysctl.confでnet.ipv4.tcp_fin_timeout = 30およびnet.ipv4.tcp_tw_recycle = 1を変更した後。ウェブサイト(PHPまたはHTML)を接続拒否しようとすると毎回受信します。このオプションを削除した後も同じです。私は古い状態を取り戻そうとする必要があります。私は答えを探します。user1881277 –

    関連する問題