同じ SQL クエリ ステートメントに対して準備とクエリを使用するコストは同じですか?
$sql = $pdo ->prepare("select * from table");
$sql ->execute();
$rs = $sql ->fetch(PDO :: FETCH_ASSOC) );
$sql = $pdo -> query("select * from table");
$rs = $go -> fetch(PDO::FETCH_ASSOC);
たとえば、上記のように準備した場合クエリとクエリの効率は同じですか? (SQL ステートメント インジェクションを無視します)。
単品どちらがクエリ結果に優れていますか?
prepare はクエリ時にデータベースに少なくとも 2 回送信しますか?
PDO prepare は選択にのみ適していますか?他の 2 つの操作 update と insert into はどうなるでしょうか? prepare でプレースホルダーを使用すると、インジェクションを効果的に防ぐことができますが、それはいつでしょうか? ="abc./- #$%`123" これらの特殊記号は (エスケープされていない限り)、ステートメントの実行時にエラーが報告されます。
exec は更新および挿入に適していますか?
阿神2017-06-05 11:09:31
1.PDO::query は SQL ステートメントを実行し、渡されると PDOStatement オブジェクトを返します。 PDO::query 関数には「非常に優れた点」があります。それは、返されたレコード セットを直接走査できることです。
2.PDO::exec は SQL ステートメントを実行し、影響を受ける行の数を返します。この関数は結果コレクションを返しません。公式推奨事項:
プログラム内で 1 回だけ発行する必要がある SELECT ステートメントの場合は、PDO::query() の使用を検討してください。
複数回発行する必要があるステートメントの場合、PDO::prepare() を使用して PDOStatement オブジェクトを準備し、PDOStatement::execute() を使用してステートメントを発行できます。
PDO::exec は、SELECT/DELETE/UPDATE/INSERT などのすべての SQL ステートメントの実行をサポートしているため、PDO query() 関数よりもはるかに強力です。影響を受ける関数のみが返されるため、SELECT を実行すると PDOStatement オブジェクトを取得できないため、結果セットを走査することはできません。公式の推奨事項に従ってのみクエリを使用するか、関数を実行できます。 。
3. prepare の原理は、SQL ステートメントを事前に SQL サーバーに送信してコンパイルし、exec の実行時に実際に実行するというものです。一度コンパイルして何度も実行します。クエリが 1 つだけの場合、準備とクエリの効率は基本的に同じです。複数回実行すると、prepare の効率が明らかになります。また、where in (" ") などのすべての SQL インジェクションを防止できるわけではありません。