そのため、解決できないPHP PDOでスクリプトを実行すると、この問題が発生します。私のスクリプトは、異なるサーバー上の異なるデータベースからの情報のインデックスを作成しています (主に Select クエリ)。
スクリプトを開発していたとき、すべてのデータベースは同じサーバー上にあり、すべて正常に動作していました。データベースを 3 つの異なるサーバーに移動したので、この恐ろしいエラーが発生します。
これは、スクリプトを実行するたびに起こることです:
スクリプトは、次の単純なクエリを実行するポイント (そして毎回そこでクラッシュする) まで、正常に実行されます。
(注、スクリプトが入っており、DBにアクセスして操作するためにPHP
使用しています)PHP PDO
SELECT *
FROM a_table
WHERE a_column = a_value.
その後、クラッシュし、次のエラーが発生します。
[a_date] - trunk - FATAL - Unmanaged Exception of type 'App_Exception'
File: /.../.../.../a_php_file.php
Line: a_line
Message: Error executing query.
Info:
Array
(
[0] => HY000
[1] => 2006
[2] => MySQL server has gone away
)
Trace:
#0 /.../.../.../a_php_file.php(124): App_something::a_metho('a_variable...')
私は長い間検索しましたが、まだ解決策が見つかりません。
私は試した:
/etc/my.cnf (クラッシュが発生した sql) の max_allowed_packed を変更して、16M から 64M に設定します (クエリが返す結果は実際にはそれほど大きくありません)。
既存の接続を強制終了するのを忘れた場合に備えて、max_connections を変更して、より多くの接続を許可します。
ネットワーク上の問題を確認する
ホストからリモートSQLサーバーへの接続など、他の多くの小さなこと。
本当に奇妙なのは、クエリを単独で実行しても問題なく動作し、すべてのデータベースが同じサーバー上にある場合でも問題なく動作することです。
私はこの時点で本当に迷っており、問題がどこから来るのか見当がつかないので、助けやヒントを求めに来ています.
これは、例外でクラッシュするメソッドです。
public static function my_method($my_mysql_WHERE_variable)
{
//======================================
// cached?
//======================================
if(isset(self::$_table1[$my_mysql_WHERE_variable])) {
return self::$_table1[$my_mysql_WHERE_variable];
}
$pdo = my_App::getConnection();
$query = "SELECT *
FROM
a_table
WHERE
a_column = :my_mysql_WHERE_variable";
$stmt = $pdo->prepare($query);
if($stmt === false) {
**---------------IT CRASHES HERE-----------**
throw new my_App_Exception("Error executing query.\nInfo:\n" . print_r($pdo->errorInfo(), true));
}
.
.
.
return $a_value;
}