1

私はPHPとMYSQLiの接続に精通しており、http: //www.php.net/manual/en/mysqli.persistconns.phpを含むPHPのドキュメントを読んだことがありますが、確立して閉じるための適切な方法(パフォーマンスの観点から)について疑問に思っています。 PHPを使用したMYSQLiでの接続。

mysqli接続を開始および閉じる最も効率的な方法は何ですか?

クエリ中にmysqli接続が失われた場合に処理する適切な方法は何ですか?

これが私の現在の設定です:

  1. Opening a connection at the beginning of the php page
  2. Making all the necessary queries through other classes
  3. Closing the connection at the end of page

/*
public exampleQuery ($conn, $p1, $p2) {
  $stmt = $conn->prepare("SELECT id FROM tbl_name WHERE c1=? AND c2=?");
  $stmt->bind_param("ss", $p1, $p2);
  $stmt->execute();
  // etc..
}
*/


$mysqli_connection = $connectionClass->connectToMYSQLi();
//Execute queries using prepared statements
$queryClass->exampleQuery($mysqli_connection,$param1, $param2);
$queryClass->exampleQueryTwo($mysqli_connection,$param1, $param2);
//etc...
$connectionClass_>closeMYSQLiConnection($mysqli_connection);
4

1 に答える 1

1

ページがリロードされるか、新しいユーザーが同時にアクセスすると、PHP は接続をどのように処理しますか?

また、PHP は、スクリプトで使用する変数が、たまたま同じページにアクセスした別のユーザーによって使用されないようにします。データベース接続についても同様です。

資格情報 (ユーザー名/パスワード) を使用してデータベースにアクセスしても、同じ資格情報を使用している他の誰かと「衝突」できるわけではありません。データベースは、複数の接続を同時に実行してもまったく問題ありません。それらがすべて同じ資格情報を使用している場合でも同様です。

しかし、これはあなたの問題/懸念ではありません (機能のエンドユーザーとして、開発者として) が、PHP fork プロセスまたはスレッドセーフモジュールを使用して各要求を処理することに要約されます。次に、各リクエストに関連付けられた各プロセスが、データベースに対して新しいセッションを開始 (またはリサイクル) します。

準備済みステートメント:

準備されたステートメントは良いです。これらは、データベースに格納されている実行計画を使用する機会をデータベースに提供します。複雑なクエリを使用する場合、これにより速度が向上する可能性があります。また、SQL インジェクションから保護します。

したがって、準備済みステートメントを引き続き使用してください。

コード内でそれらをどのように構造化するかは、あなた次第です。データベースは、ステートメントをクラスから呼び出すかどうかをまったく気にしません。Java アプリケーションから同じ準備済みステートメントを使用する場合、それらは準備済みステートメントのままです (データベースがそれらをサポートしている場合)。データベースには、実行計画が用意されています。

だから、あなたが一番好きな方法でやってください(=あなたにとって最も明確/簡潔です)。

このテーマについてはまだまだ言いたいことがたくさんあります。いくつかの概念は部分的にしか正しく説明できませんでしたが、これで全体像が理解できることを願っています。

于 2012-07-25T15:44:33.310 に答える