http://php.net/manual/en/mysqli.quickstart.prepared-statements.php からの正しい MySQLi パラメータ化クエリ構文:
リーリーただし、これは絶対に行わないでください:
リーリー 私の意見では、 名前付きパラメータ
置換は、API レベルで実装するのが合理的な機能です。驚いたことに、MySQLi はライブラリに 名前のないパラメータ
のみを実装します。
正当な理由はありますか? PDO、DQL、ORM がすべてクエリで名前付きパラメーターをどのように受け取るかを見ると、これは私には理解できません。
MySQLi 開発者が「怠け者なのでやりたくない」という状況に陥らないことを願っています。きっと正当な理由があるはずだと信じていて、その理由、あるいはその理由を見つける方法を探しています。名前付きパラメータが MySQLi 拡張ライブラリに実装されていない理由。
P粉7920264672023-11-01 09:02:19
伝統的に、MySQLi は MySQL API です。それ自体では何も追加されませんが、これには理由があります。名前付きプレースホルダーのような機能を追加するには、(考えてみれば) 膨大な SQL クエリ解析が必要になります。もちろん、これはデータベース API の仕事ではありません。他の回答で述べたように、API は DAL または DBAL ではなく、異なる目的を果たします。
PDO は、言語ではめったに見られない偉大な偉業であり、ウェス ファーロングは、ほぼ独力でその任務を引き受けた天才です。しかし、PDO は別の話です。これはデータベース アクセスの抽象化レイヤーであり、好むと好まざるにかかわらず、これを実現するにはクエリ パーサーが必要です。すでにクエリ パーサーがあり、ドライバーの 1 つが名前付きプレースホルダーをサポートしているため、サポートされているすべてのドライバーにそれを追加するのが自然です。ご覧のとおり、MySQLi ではすべてが変わります。
簡単に言うと「怠惰」ではなく「怠惰」です。それは規範に従うことです。
P粉5338986942023-11-01 00:14:00
MYSQLi
名前付きパラメータがサポートされない主な理由は 2 つあります。
は機能します - 車輪を再発明する必要はありません
mysqli は、
PDO と比較して多くの欠点があるにもかかわらず、優れたラッパーと簡単に比較できます。つまり、名前付きパラメーター (とりわけ) がサポートされています。 mysqli 自体ではなくラッパーによって。これは仕様によるもので、理由は 1 つだけです:
は、高速かつ柔軟なライブラリになるように設計されています。
mysqli と
pdo は両方とも PHP 5 (PDO バージョンは 5.3 だったと思います) でリリースされたため、異なる目的を果たします。
mysqli を使用します。名前付きパラメータが必要ですか?これを処理するには、
PDO を使用するか、
mysqli ラッパーを構築します。ただし、これにより実行時間が妨げられることに注意してください。