MySQLi ライブラリが名前付きパラメータをネイティブにサポートしないのはなぜですか?
P粉024986150
P粉024986150 2023-10-31 09:54:43
0
2
644

http://php.net/manual/en/mysqli.quickstart.prepared-statements.php からの正しい MySQLi パラメータ化クエリ構文:

リーリー

ただし、これは絶対に行わないでください:

リーリー

私の意見では、 名前付きパラメータ 置換は、API レベルで実装するのが合理的な機能です。驚いたことに、MySQLi はライブラリに 名前のないパラメータ のみを実装します。

正当な理由はありますか? PDO、DQL、ORM がすべてクエリで名前付きパラメーターをどのように受け取るかを見ると、これは私には理解できません。

MySQLi 開発者が「怠け者なのでやりたくない」という状況に陥らないことを願っています。きっと正当な理由があるはずだと信じていて、その理由、あるいはその理由を見つける方法を探しています。名前付きパラメータが MySQLi 拡張ライブラリに実装されていない理由。

P粉024986150
P粉024986150

全員に返信(2)
P粉792026467

伝統的に、MySQLi は MySQL API です。それ自体では何も追加されませんが、これには理由があります。名前付きプレースホルダーのような機能を追加するには、(考えてみれば) 膨大な SQL クエリ解析が必要になります。もちろん、これはデータベース API の仕事ではありません。他の回答で述べたように、API は DAL または DBAL ではなく、異なる目的を果たします。

PDO は、言語ではめったに見られない偉大な偉業であり、ウェス ファーロングは、ほぼ独力でその任務を引き受けた天才です。しかし、PDO は別の話です。これはデータベース アクセスの抽象化レイヤーであり、好むと好まざるにかかわらず、これを実現するにはクエリ パーサーが必要です。すでにクエリ パーサーがあり、ドライバーの 1 つが名前付きプレースホルダーをサポートしているため、サポートされているすべてのドライバーにそれを追加するのが自然です。ご覧のとおり、MySQLi ではすべてが変わります。

簡単に言うと「怠惰」ではなく「怠惰」です。それは規範に従うことです。

いいねを押す +0
P粉533898694

MYSQLi 名前付きパラメータがサポートされない主な理由は 2 つあります。

    これはラッパーで使用することを「意図」しており (この用語は大まかに使用しています)、
  1. これに対応する
  2. PDO は機能します - 車輪を再発明する必要はありません
ポイント 1 について詳しく説明すると、

mysqli は、PDO と比較して多くの欠点があるにもかかわらず、優れたラッパーと簡単に比較できます。つまり、名前付きパラメーター (とりわけ) がサポートされています。 mysqli 自体ではなくラッパーによって。これは仕様によるもので、理由は 1 つだけです:

  1. Mysqli は、高速かつ柔軟なライブラリになるように設計されています。
開発者がベース ライブラリにさらに多くの機能を組み込むと、直感に反して柔軟性が低下し、ロード/実行に時間がかかります。

mysqlipdo は両方とも PHP 5 (PDO バージョンは 5.3 だったと思います) でリリースされたため、異なる目的を果たします。

実行時間を短縮したいですか?ラッパーなしで

mysqli を使用します。名前付きパラメータが必要ですか?これを処理するには、PDO を使用するか、mysqli ラッパーを構築します。ただし、これにより実行時間が妨げられることに注意してください。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート