2

単純な選択クエリに準備済みステートメントを使用する必要があるかどうか疑問に思っていましたか?

そのような:

`SELECT * FROM `table_name`

これで、次のようにする方が良いではないでしょうか:

$db->query('SELECT * FROM `table_name`');
4

4 に答える 4

1

クエリが (スクリプトごとに) 1 回だけ実行さ、実際に変数が含まれていない場合、準備されたステートメントを使用するか、1 回限りのクエリを使用するかに大きな違いはありません

于 2012-09-10T09:47:02.237 に答える
1

@decezeは正しいです。ただし、準備済みステートメントを使用する場合は、次のようなものを使用します。

<?php
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name = ?");
if ($stmt->execute(array($_GET['name'])))       // <== passed array of parameters
{
  while ($row = $stmt->fetch()) 
  {
    print_r($row);
  }
}
?>
于 2012-09-10T09:50:09.970 に答える
0

必須ではないと思いますが、コードの整合性のために行う方がよいでしょう。この単純な選択クエリ (割り当てがない) は攻撃できません。

于 2012-09-10T09:48:52.870 に答える
0
  1. table_name がハードコードされた項目ではなく変数である場合、SQL インジェクションから身を守っています。
  2. 準備済みステートメントは、準備 (つまり、計画) と実行を分離します。
  3. 同じクエリを何度も実行する場合は、クエリを 1 回だけ計画するため、パフォーマンスが向上します。

どちらの方法でも接続を開き、実行するために行われる余分な呼び出しが同じ接続を介して行われるため、このような直接クエリで準備済みステートメントを使用することによるパフォーマンスの低下は事実上存在しません。

テーブルから特定のフィールドのみを選択する場合に選択に * を使用すると、パフォーマンスが低下する可能性があります。

于 2012-09-10T09:53:38.000 に答える