ホームページ  >  記事  >  バックエンド開発  >  PDO クエリ プロセスによってサーバーが切断されるのはなぜですか?

PDO クエリ プロセスによってサーバーが切断されるのはなぜですか?

WBOY
WBOYオリジナル
2016-06-23 14:00:53903ブラウズ

今日、誰かのプログラムを変更するのを手伝い、すべてが正常であることをテストした後、プログラムに送信しましたが、特定のページにアクセスすると、ページが開けないというメッセージが表示されました。ネットワークを確認してみたところ、サーバーが切断されているようでした。

      $sql = "SELECT client_id, expires, scope FROM tokens WHERE oauth_token = :oauth_token";      $stmt = $this->db->prepare($sql);      $stmt->bindParam(":oauth_token", $oauth_token, PDO::PARAM_STR);      $stmt->execute();      $result = $stmt->fetch(PDO::FETCH_ASSOC);

長い間追跡した結果、$stmt->execute(); を実行するとこのような問題が発生することがわかりました
しかし、不思議なことに、同じページ上の別の関数は正常です:
      $sql = "SELECT code, client_id, redirect_uri, expires, scope FROM auth_codes WHERE code = :code";      $stmt = $this->db->prepare($sql);      $stmt->bindParam(":code", $code, PDO::PARAM_STR);      $stmt->execute();


デバッグ後、パラメータ内のデータは問題ありません。Mysqlドライバに変更してデータを取得したところ、正常に動作したのでデータには問題ありません。何が問題なのでしょうか?そのような問題に遭遇した人はいますか?


議論への返信(解決策)

情報が少なすぎて判断が難しい。

開くときにエラーメッセージが表示されますか?

データベース接続を確認してください

参考: http://www.php.net/manual/en/pdo.error-handling.php

エラーの理由は、select に oauth_token フィールドがないことです。

$sql = "SELECT client_id、期限切れ、トークン WHERE oauth_token = :oauth_token"
$stmt = $this->db->prepare($sql);
$stmt->bindParam( ": oauth_token", $oauth_token, PDO::PARAM_STR);

$sql = "SELECT コード、client_id、redirect_uri、期限切れ、スコープ FROM auth_codes WHERE code = :code";
$stmt = $this->db-> prepare($sql);
$stmt->bindParam( ":code", $code, PDO::PARAM_STR);

情報が少なすぎて判断できません。

開くときにエラーメッセージが表示されますか?
エラー プロンプトをオンにすると、他のエラーが表示されます。ここに到達すると、エラーは表示されず、トレースとデバッグの後、プログラムが実行されていることがわかります。 $stmt->execute() このステップは無効です。

エラーの理由は、select に oauth_token フィールドがないことです。

$sql = "SELECT client_id、期限切れ、トークン WHERE oauth_token = :oauth_token"
$stmt = $this->db->prepare($sql);
$stmt->bindParam( ": oauth_token", $oauth_token, PDO::PARAM_STR);

$sql = "SELECT コード、client_id、redirect_uri、期限切れ、スコープ FROM auth_codes WHERE code = :code";
$stmt = $this->db-> prepare($sql);
$stmt->bindParam( ":code", $code, PDO::PARAM_STR);

これは、Select のフィールドと何の関係がありますか。 ? ? ? ?

補足: SQL を直接結合して $this->db->query を使用することはできません。
非常に奇妙な問題。その後、すべてが PDO を使用せずに Mysql で直接読み書きできるように変更されました。しかし、この問題の原因は見つからず、非常に不快に感じました。

常に誤った情報を投稿する必要があります。
さらに、php バージョンが 5.3 より低い場合は、PDO を使用しないことをお勧めします (不可解なエラーが常に発生します)

常にエラー メッセージを投稿する必要があります。
さらに、php のバージョンが 5.3 より低い場合は、PDO を使用しないことをお勧めします (不可解なエラーが常に発生します)
前述したように、エラー メッセージは表示されず、同時に実行が停止します。サーバーが切断され、ブラウザにサーバーに接続できないことを示すメッセージが表示されます。

print_r($this->db->e​​rrorInfo());

print_r($this->db->e​​rrorInfo());
メッセージはありません。
エラー メッセージをテキスト ドキュメントに書き込むなど、すべての基本的なデバッグ方法を試したことを明確にしておきます。サーバーが切断されているため、情報をファイルに書き込みました。ファイル内にエラー メッセージはなく、そのステートメントに到達したときに後続のステートメントがすべて実行されないことがわかります。これは、サーバーがスクリプトの実行を停止し、接続を切断したことを意味します。

情報はありませんか?それは契約ではありません
エラーがなくても(エラー番号は0000)、出力はあります

しかし、実際の状況は次のようになります。エラー番号が0であるか空であるかは忘れました。エラーを示す情報出力。
なお、どのようなエラーが発生しても、エラーメッセージが出力された場合はサーバーが切断されることはありません。他の理由があるはずですが、何が問題なのかわかりません。

完全なコードを投稿してください。エラーがあるはずです。

SELECT client_id、expires、scope FROM tokens WHERE oauth_token = :oauth_token

SQL を mysql エディターに入れて実行してみます。

完全なコードを投稿してください。エラーがあるはずです。
私が与えたコードは十分に完成しています。データベース接続部分が指定されていないだけですが、間違いなく正しく、パブリック呼び出しであり、同じライブラリであり、その他はすべて正常に実行されています。

SELECT client_id、expires、scope FROM tokens WHERE oauth_token = :oauth_token

SQL を mysql エディターに入れて実行してみます。
最も基本的なデバッグ方法は、以前に試したことがありますが、SQL クエリ ステートメントに問題はありません。それ以外の場合は、Alibaba Cloud サーバーに移動した後にハングアップします。 Mysql の直接クエリはすべて正常です。

Alibaba Cloud Server は PDO をサポートしていますか?
管理者にご確認ください

Alibaba Cloud Server は PDO をサポートしていますか?
管理者に確認してください
phpinfo()を確認すると表示されないでしょうか?

Alibaba Cloud Server は PDO をサポートしていますか?
管理者に確認してください
投稿には他の場所は正常であると記載されていますが、これが正常ではない場合、他の場所は正常でしょうか?

わかりました!
1. PDO にはエラーがありますが、mysql にはエラーはありません
2. ある部分は正常ですが、ある部分は異常です

明らかに問題は異常なプログラムにあります
mysql には prepare と bindingParam がありません
エラーはどこにあると思いますかなれ?

わかりました!
1. PDO にはエラーがありますが、mysql にはエラーはありません
2. ある部分は正常ですが、ある部分は異常です

明らかに問題は異常なプログラムにあります
mysql には prepare と bindingParam がありません
エラーはどこにあると思いますかなれ?
プログラムは正常です。少なくとも開発環境ではすべてが正常です。
エラーの内容を知っていたら、ここで質問しなかっただろう。

$this->db=NULL; があるかどうかを確認してください
クリアされていますか?

クライアントをお持ちですか? クライアントは常に次のようなものを出力します
これは、サーバー上のすべての Apache/nginx ログを表示するためのものです。 ?それが表示されない場合は、クライアント上のサーバーの応答の http コードが何であるか、メッセージが何であるかを確認する方法は常にあります。

PDO 長い接続を使用すると、一部の Web ページが直接ハングアップすることに遭遇しました。

$this->db=NULL; があるかどうかを確認してください

クリアされていますか?
いいえ、データベースに接続するための公開コードを除いて、そこにあるべきすべてのコードを投稿しました。 ,
注: ローカルでは正常ですが、サーバーでは正常ではありません。それがクリアされれば、現地でも問題が起きる。

奇妙な問題、解決されていません。

忘れて、解散の準備をしてください。 。 。

私も今日同じ問題に遭遇しました。 。 PDO は選択クエリを実行します。これにより、Apache が直接切断されます。PHP ログと Apche ログをクエリした後、エラー フィードバックはありません。 。ただし、UPDATE/INSERT を実行する場合は問題ありません。再度テストしたところ、select a from table を実行すると問題ありませんでしたが、select a と b from table を実行するとすぐにハングしてしまいました。

私も今日同じ問題に遭遇しました。 。 PDO は選択クエリを実行します。これにより、Apache が直接切断されます。PHP ログと Apche ログをクエリした後、エラー フィードバックはありません。 。ただし、UPDATE/INSERT を実行する場合は問題ありません。再度テストしたところ、select a from table を実行すると問題ありませんでしたが、select a と b from table を実行するとすぐにハングしてしまいます。 おそらく欠陥なので、これはもう必要ありません。投稿しました。 。 。 。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。