ホームページ  >  に質問  >  本文

MySQLi ライブラリが名前付きパラメータをネイティブにサポートしないのはなぜですか?

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

リーリー

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

リーリー

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

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

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

P粉024986150P粉024986150328日前532

全員に返信(2)返信します

  • P粉792026467

    P粉7920264672023-11-01 09:02:19

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

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

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

    返事
    0
  • P粉533898694

    P粉5338986942023-11-01 00:14:00

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

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

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

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

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

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

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

    返事
    0
  • キャンセル返事