単純な選択クエリに準備済みステートメントを使用する必要があるかどうか疑問に思っていましたか?
そのような:
`SELECT * FROM `table_name`
これで、次のようにする方が良いではないでしょうか:
$db->query('SELECT * FROM `table_name`');
単純な選択クエリに準備済みステートメントを使用する必要があるかどうか疑問に思っていましたか?
そのような:
`SELECT * FROM `table_name`
これで、次のようにする方が良いではないでしょうか:
$db->query('SELECT * FROM `table_name`');
クエリが (スクリプトごとに) 1 回だけ実行され、実際に変数が含まれていない場合、準備されたステートメントを使用するか、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);
}
}
?>
必須ではないと思いますが、コードの整合性のために行う方がよいでしょう。この単純な選択クエリ (割り当てがない) は攻撃できません。
どちらの方法でも接続を開き、実行するために行われる余分な呼び出しが同じ接続を介して行われるため、このような直接クエリで準備済みステートメントを使用することによるパフォーマンスの低下は事実上存在しません。
テーブルから特定のフィールドのみを選択する場合に選択に * を使用すると、パフォーマンスが低下する可能性があります。