0

更新: 助けてくれてありがとう、MySQL リクエストを処理するための独自の PHP クラスを作成してみることにしました。

mysql_関数から関数に切り替えようとしているときに、mysqli_文字通り数万行の PHP/MySQL コードとクエリが数百のファイルに分散しているという問題に直面しています。mysql_querymysql_num_rows、などの関数を使用しますmysql_fetch_assoc。これらを行ごとに (検索/置換を使用しても)mysqli_準備済みステートメントを含む関数に変更するのは十分に面倒ですが、将来 PHP.net が何か他のものをリリースすることを決定した場合はどうなるでしょうか。関数を非推奨にしmysqli_ますか?

mysqli_そのため、現在、関数を呼び出してすべてのファイルに含める独自の MySQL ライブラリを作成することを検討しています (それをあなたはそれと呼んでいますか?) 。このようにして、将来何かを変更する必要がある場合、理論的には、手動ですべてを手動で変更するのではなく、「ライブラリ」の関数を一度変更すると、変更がすべてのページに反映されます。

これは良い考えでしょうか?MeekroDBと呼ばれるものをオンラインで見つけましたが、まず第一に、それが私が探しているものかどうかわからず、第二に、これを商業的に使用するために 50 ドルを請求しています (私がやりたいことです)。他に無料のソリューションはありますか? 、または私は時間を無駄にしていますか?

コメント/フィードバックをお待ちしております:)

編集:これが明確でない場合、データベースにクエリを実行しているすべてのファイルでデータベースに接続しているわけではありません。MySQL データベースに接続するために使用する functions.php ファイルがあり、includeそのファイルは他のすべてのファイルにあります。mysql_query私の質問は、 、mysql_num_rows、などの関数に関連していますmysql_fetch_assoc

4

4 に答える 4

4

への参照リンクを見ると、あなたが書いているのは/メソッドMeekroDBのような MySQL API ではないと思います。mysql_*mysqli_*

実際に書き込もうとしているのは、MySQL に固有のものであるにもかかわらず、 Database Abstraction Layerです。

実際には、MySQL と通信するための独自の基礎となるモジュールを作成しない限り (もちろん、PHP でもこれを行うのは困難mysqli_ですが)、いずれにせよメソッドを裏付けとして使用することになるでしょう。

利用可能なこれらのレイヤーはたくさんありますが、正直に言って、自分で作成するよりも PDO を使用mysqli_*するか、関数が非推奨になることを心配している場合は PDO を使用することを検討したいと思います。PDO は独自の MySQL ドライバーを使用するため、必要に応じて更新されます。また、使いやすいトランザクション、準備済みステートメントなど、必要なものをすべてサポートします。

などの独自の簡単にアクセスできるメソッドを作成したい場合はDB::Query(..)、PDO を十分に簡単にラップすることでこれを行うことができます。

ただし、全体として、これがコードの整理にどのように役立つかはわかりません。おそらく、テーブルに直接マップする独自のクラスを定義できる、DB への ORM (オブジェクト関係マッパー) のようなものを調べたいと思うでしょう。これにより、エッジ ケースを除いて、クエリを実行する必要性がほぼ完全に軽減されます。 . 利用可能な最も包括的な ORM はおそらくDoctrineでしょう。

ORM を使用して実現できることの例として、以下に示すコード スニペットを示します。

$blogPost = BlogPosts::Load(123);
$blogPost->title = 'New Title';
$blogPost->save();
于 2013-01-20T16:56:54.317 に答える
3

コードを基本的な PHP データベース関数にラップするのは良い考えです。それ以外の場合は、独自のライブラリを構築する必要のない適切なソリューションが既にいくつかあります。ORM (Object-relational_mapping) は興味深いかもしれません。人気のあるライブラリはdoctrineまたはpropelです。

于 2013-01-20T17:00:10.713 に答える
2

これは良い考えでしょうか?

実際のところ、これがSQLクエリを処理 する唯一の正しい方法です。

SQLインジェクションからクエリを保護するように設計された私のライブラリを提案させてください。それは絶対に無料で、50ドルまたは5000ドルかかるものよりもはるかに優れています。

使い始める前に学ぶ必要があるのは、タイプヒントのプレースホルダーだけですが、概念は非常に簡単で、すぐに理解できると確信しています。それでも、ご不明な点がございましたらお気軽にお問い合わせください。

ちなみに、PDOは明らかに進むべき道ではありません。いくつかの基本的なケースをわずかに超えるクエリでは、使用するのが醜く、面倒で、安全ではありません。
例えば:

// SafeMySQL: only 2 lines and not a sign of injection
$sql  = "SELECT * FROM goods WHERE category IN(?a) ORDER BY ?n";
$data = $db->getAll($sql, $_GET['categories'], $_GET['orderby']);

// PDO
// errr... (massive headscratching resulting with something like 
// 2 screens of code with manual escaping and all that stuff 
// but most likely still unsdafe as only few PHP developers
// actually have an idea how to properly handle such cases )
于 2013-01-20T17:02:30.657 に答える
1

「データベース ラッパー クラス」に似たものを探しています。

PHP 5.1 以降には、そのための PDO と呼ばれる組み込みの抽象化レイヤーがあります。

于 2013-01-20T16:58:15.860 に答える