プリペアドステートメントはSQLインジェクションから保護するのに適していますが、SQLクエリで変数が使用されていない場合は利点があります準備された声明を使って?特にクエリが1回だけ使用される場合は特にですか?sqlクエリに変数がないときにPDOでプリペアドステートメントを使用する利点があります
prepare()とexecute()をquery()だけで使用する利点がありますか、この場合は単にqueryを使う利点がありますか?例えばパフォーマンスベンチ
プリペアドステートメントはSQLインジェクションから保護するのに適していますが、SQLクエリで変数が使用されていない場合は利点があります準備された声明を使って?特にクエリが1回だけ使用される場合は特にですか?sqlクエリに変数がないときにPDOでプリペアドステートメントを使用する利点があります
prepare()とexecute()をquery()だけで使用する利点がありますか、この場合は単にqueryを使う利点がありますか?例えばパフォーマンスベンチ
いいえ、利点はありません。差はごくわずかであるが、あなたはいつもにも、このようなマイナーな最適化を実装するために機能を書き込むことができます。
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
クエリーを1回だけ使用すると、の違いはありません。ただし、プリペアドステートメントでは実行メタプランが作成されます(ただし、パフォーマンスの差は目立たない)。 ステートメントがサーバー側で一度だけコンパイルされ、異なるパラメーターを複数回渡すことができるため、プリペードされたステートメントで異なるパラメーターを複数回使用してクエリを使用すると、パフォーマンスが少し改善されます。クエリは、エミュレートされたプリペアドステートメントを使用する場合は実際のプリペアドステートメントを使用した場合にのみコンパイルされ、コンパイルされず、SQLの差し込み保護のほかにパフォーマンスの違いはありません。
おそらく一貫性?おそらく共通のインターフェイス層を使用して? –
このケースでは、クエリを使用するメリットがあると思っていました。私は明確にするために質問を編集しました。 – ceteri
どのDBMSが作成し、モデル化していますか? OracleとSQLサーバーにはプリコンパイルの問題があります。 MySQLではなく。 –