2017-02-22 6 views
0

プリペアドステートメントはSQLインジェクションから保護するのに適していますが、SQLクエリで変数が使用されていない場合は利点があります準備された声明を使って?特にクエリが1回だけ使用される場合は特にですか?sqlクエリに変数がないときにPDOでプリペアドステートメントを使用する利点があります

prepare()とexecute()をquery()だけで使用する利点がありますか、この場合は単にqueryを使う利点がありますか?例えばパフォーマンスベンチ

+0

おそらく一貫性?おそらく共通のインターフェイス層を使用して? –

+0

このケースでは、クエリを使用するメリットがあると思っていました。私は明確にするために質問を編集しました。 – ceteri

+0

どのDBMSが作成し、モデル化していますか? OracleとSQLサーバーにはプリコンパイルの問題があります。 MySQLではなく。 –

答えて

0

いいえ、利点はありません。差はごくわずかであるが、あなたはいつもにも、このようなマイナーな最適化を実装するために機能を書き込むことができます。

class MyPDO extends PDO 
{ 
    public function run($sql, $args = NULL) 
    { 
     if (!$args) 
     { 
      return $this->query($sql); 
     } 
     $stmt = $this->prepare($sql); 
     $stmt->execute($args); 
     return $stmt; 
    } 
} 

は今、あなたは準備されたステートメントを実行するかどうかを決めることができPDOを持っている:

$pdo = new MyPDO(...); 
$count = $pdo->run("SELECT count(*) FROM t")->fetchColumn(); // no prepare 
$user = $pdo->run("SELECT * FROM t WHERE id=?",[$id])->fetch(); // prepare 
0

クエリーを1回だけ使用すると、の違いはありません。ただし、プリペアドステートメントでは実行メタプランが作成されます(ただし、パフォーマンスの差は目立たない)。 ステートメントがサーバー側で一度だけコンパイルされ、異なるパラメーターを複数回渡すことができるため、プリペードされたステートメントで異なるパラメーターを複数回使用してクエリを使用すると、パフォーマンスが少し改善されます。クエリは、エミュレートされたプリペアドステートメントを使用する場合は実際のプリペアドステートメントを使用した場合にのみコンパイルされ、コンパイルされず、SQLの差し込み保護のほかにパフォーマンスの違いはありません。

+0

したがって、準備と実行に対してクエリを使用する利点はありません。 (照会のコンパイル) – ceteri

+0

パラメーターを使用せずにSQLを1回だけ使用する場合は、照会を使用しますが、メタプランで私の回答を編集しました – Eimsas

+0

異なるパラメーターはありますか? OPは、変数は使用されていないと言います。 –

関連する問題