3

MYSQLiの代わりに作業を始めたばかりでMYSQL、クエリなどごとにデータベースに接続する必要があるという大きな煩わしさに遭遇しました。古いMYSQLを使用していなかったのに、なぜ今これを実行する必要があるのですか?または、これを行う必要がない方法はありますか?

いくつかの例:

Mysql:

mysql_query("SELECT id FROM table");

Mysqliでは、常に次のことを行う必要があります。

mysqli_query($db, "SELECT id FROM table");

また、私はこれを行う必要があります:

mysqli_last_id($db);

mysqli_real_escape_string($db);

私はこれに対する答えを一晩中見つけようとしましたが、何も見つかりません。

4

3 に答える 3

3

明確にすることがいくつかあります

  1. 毎回接続する必要はありません。データベースへの接続は別のものです。mysqli_connect()を呼び出す場合と、アプリケーションごとに1だけ行う必要があります。
  2. つまり、接続リソース変数を使用するだけです。
  3. はい、すべての関数に渡す必要があります。大したことではありません、話すことは何もありません。
  4. 唯一の問題は、可変スコープにある可能性があります。関数内で使用global $db;します。
  5. 機械的にmysqliに移行し、古い方法で新しい関数を使用することはまったく意味がありません。アプリケーションコードでmysqli_real_escape_stringを使い続けたい場合は、遷移をまったく気にせず、mysqlを使い続けてください。
  6. 移動の唯一の理由(ただし、かなり弱い)-プリペアドステートメントを使用する。
  7. プリペアドステートメントに対するMysqliのサポートはひどいです
  8. だから、mysqliをやめてPDOに行くほうがいい
  9. それにもかかわらず、生のAPI関数を使用すると、mysql、mysqli、PDOのいずれであっても醜いです。代わりに、アプリケーションコードで使用する抽象化ライブラリを採用する必要があります。
于 2013-03-16T06:20:45.493 に答える
1

はい、mysql_*関数は使用しないでください。非推奨です。代わりにPDOを使用してください

http://www.php.net/manual/es/pdo.construct.php

$pdo = new PDO(/* Connection options */);

$rows = $pdo->query("SELECT * FROM table")->fetchAll(PDO::FETCH_OBJ);

foreach ($rows as $row) {
   print_r($row);
}

$pdo->query("INSERT INTO table SET field1 = 'value1'");
于 2013-03-16T05:01:57.300 に答える
0

PHPを使用してMySQL用のDALMPデータベース抽象化レイヤーを試してみてください。は純粋なmysqliを使用し、必要な場合にのみデータベースに接続します。可能な場合は、データベースに触れることなく、キャッシュから結果を取得します。

キャッシュの使用例は、ここにあります。キャッシュとプリペアドステートメント

于 2013-03-20T18:14:42.293 に答える