1

現在、クエリを実行する方法は次のとおりです。

$this->query(sprintf('insert into mytable values (%d, "%s")',
    $a, $this->esc($b)));

しかし、自動エスケープを実装したいので、準備済みステートメントをラップして、これを実行できるようにします。

$this->query('mytable 値に挿入 (?, ?)',
    $a、$b);

query() メソッドが、単一のクエリを実行するために準備されたステートメントをラップすることは理にかなっていますか?

4

1 に答える 1

0

そのような機能を持つことは、実際には唯一の正気の方法です。

生の API 関数をアプリケーション コードで直接使用する一方で、この祝福されたスタック オーバーフロー サイトで非常に宣伝されていることは、これまでで最悪のプラクティスの 1 つです。

はい、単一のクエリ実行でも意味があります。準備されたステートメントの唯一の目的は、クエリを適切かつ無条件にフォーマットすることです。

ただし、ネイティブのプリペアド ステートメントを使用して mysqli 用の関数を作成するのは非常に複雑な作業です。それを達成するには、多くの経験と研究が必要です。

たとえば、任意の数のパラメーターをクエリに追加するだけでも、画面一杯のコードが必要になります。複数のパラメーターを mysqli クエリにバインドする

結果を配列に入れるには、その 2 倍が必要です。

ただし、エミュレートされたアプローチの場合ははるかに簡単であり、 safeMysqlと呼ばれるそのような関数 (実際には関数のセット) に対する私の試みを検討することができます。しかし、えーと...すでに言ったようです。

于 2013-08-01T07:57:55.820 に答える