3

これは非常にばかげているように聞こえるかもしれませんが、mysqli のプリペアド ステートメントとそのオブジェクト指向アプローチが魅力的だと思うので、過去の落書きのいくつかを mysql から mysqli に変換する予定です。

ここにあります... 質問

mysqlでは、たとえば、データベースを必要とするすべてのファイルに含まれる構成ファイルを使用していました(つまりrequire('sys/dbconfig.php');

これをmysqliで行う必要があるのか​​ 、それとも他の人が言うように、必要なときに接続を開き、必要のないときに閉じます(つまり$mysqli = new mysqli($host, $user, $pass, $database);、データベーストランザクションが必要な場所に固執する必要があるかどうかはわかりません.

4

4 に答える 4

1

私はそのようにします:

config.php

define("DB_HOST", "127.0.0.1");
define("DB_NAME", "demo");
define("DB_USER", "root");
define("DB_PASS", "root");

データベース.php

// include database constants
include_once("config.php");                   

// create db connection
$db = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);         

これで、次の方法で SQL ステートメントを作成できます

$result = $db->query("SELECT x FROM y;");            
于 2012-09-18T14:52:09.510 に答える
0

MySqlI手続き型オブジェクト指向の2 種類があります。

手続き型スタイルを使用すると、すべてが mysqli_ と同じままになります。あなたはオブジェクト指向スタイルを参照していますが、構成は異なります..実際にはオブジェクト指向です。つまり、mysqli の新しいインスタンスを作成し、そのメソッドを使用してジョブを完了する必要があります。

注: mysqli_ を mysql と同じ方法で使用すると、SQL インジェクションで同じ問題が発生します。mysqli は、準備されたクエリおよびパラメーター バインディングと組み合わせて使用​​する必要があります。

于 2012-09-18T14:40:14.153 に答える
0

Panique のように、設定ファイルに定数を作成する傾向があります。

fetch_dbまた、接続用のコードを含む静的メソッドを使用して App クラスを作成します。次に、db 接続が必要なときはいつでもApp::fetch_db().

今日の午後、家に帰ったら、コードともう少し説明を投稿できます。

于 2012-09-18T15:24:15.700 に答える
0

Mysqli は、インスタンス化されたときに接続を開きますnew mysqli(...)(PDO もそうです)。

PHP セッションの継続時間 (通常の Web サイト/Web アプリケーションの場合) は 1 秒未満であるため、PHP セッション中にデータベースへの接続を開いたり閉じたりする必要はありません。

コード内で mysql_connect/mysql_close に相当するものを複数回強制することは、実行時間全体にわたってアクティブな接続を必要としない長時間実行されるスクリプトでのみ役立ちます。

mysql ユーザーごとに許可される別個の mysql 接続の数は、サーバーの構成によって制限されます。

長時間実行され、他の多くのスクリプトと交差する可能性が高いスクリプトがある場合、ユーザーごとに許可されているすべての接続を使い果たし、他のユーザーをブロックする可能性があります。

(簡単な方法として) mysqli をインスタンス化することをお勧めします。このファイルは、db アクセスが必要なすべての場所に含まれますglobal $db

于 2012-09-18T15:04:34.977 に答える