4

免責事項:この質問は、それをサポートするmysqlおよびデータベース抽象化レイヤーに関するものです。

PHPのWebサイトmysql_では、PHPの機能を使用することはお勧めできません。代わりに、開発者がPDOまたはを使用することをお勧めしますMySQLi

ここに私の質問があります:mysqlに関して、すべての抽象化の下で、PDOとMySQLiは、mysql_関数のより安全で、よりオブジェクト指向のラッパーですか?

それが本当なら、CodeIgniterやSymfonyのようなフレームワークは、MySQLiの上にレイヤーを配置して、ネイティブPHPの上にレイヤーを配置することで、不要な量のラップページを作成しませmysql_んか?

それが真実でない場合は、経験豊富な開発者が使用を思いとどまる理由と、抽象化の下で実際にmysql_PDOをするのかを知りたいと思います。MySQLi

(また、コードを見に行くように私に言わないでください)+100の報奨金を与えます。

4

3 に答える 3

2

PDO関数とMySQLiクラスメソッドは、CレベルのAPIへのバインディングです。一般に、プリペアドステートメントのためにこの関数を使用することをお勧めします:PDOMySQLi。プリペアドステートメントを使用することは、SQLインジェクションを防ぐための良い方法です。

于 2012-07-26T07:55:18.083 に答える
2

ここに私の質問があります:mysqlに関して、すべての抽象化の下で、PDOとMySQLiはmysql_関数のより安全でよりオブジェクト指向のラッパーですか?

いいえ。xdazzが言ったように、MySQLiとPDOはどちらもCで実装されています。つまり、mysql_*関数をラップするだけではありません。

それが本当なら、CodeIgniterやSymfonyのようなフレームワークは、MySQLiの上にレイヤーを配置して、ネイティブPHP mysql_の上にレイヤーを配置することで、不要な量のラップページを作成しませんか?

考慮すべきもう1つの理由があります。CodeIgniterとSymfonyは、デフォルトのインターフェイスが十分に使用できないため(彼らの観点から)、おそらくデフォルトのインターフェイス上にインターフェイスを作成しました。私自身、PDOの上にレイヤーを作成しました。これは、いくつかのデフォルト設定(PDOはデフォルトでクワイエットであるため、エラーモードなど)を設定し、より直感的なAPIを作成します。PDOは非常にまともなソフトウェアですがsetAttribute( $attr, $value )、実際には私のお茶ではありません。

于 2012-07-26T08:00:52.530 に答える
1

いいえ、PDOとMySQLiはmysql_関数のラッパーではなく、Cレベルの異なる拡張機能で実装されています。

それらがラッパーであるかどうかなどを考えてみて--with-mysqliください。

于 2012-07-26T07:49:44.077 に答える