0

SQLインジェクションから保護するためにステートメントを使用しています...私の質問は、複数のクエリをループするときに何を繰り返す必要があるかということです。

2番目のクエリを見ると、prepareステートメントをforeachループに含める必要があるかどうかわかりません。

このサマリーコードに何か問題がありますか?

データベース接続を開く

// connect to database   
$conn = connect('r');

最初のクエリを起動する

$sql = "SELECT ... FROM ... WHERE xxx = ?";

$stmt = $conn->stmt_init();
$stmt->prepare($sql);
$stmt->bind_param('i', $albumid);
$stmt->bind_result(..., ...);
$stmt->execute();
$stmt->store_result();
$num_rows = $stmt->num_rows;

if ($num_rows  > 0) {
   loop results...
}

$stmt->free_result();

繰り返しのある2番目のクエリ:

$sql = "SELECT ... FROM ... WHERE xxx = ?";

$stmt = $conn->stmt_init();
$stmt->prepare($sql); ///??????? inside or outside foreach loop ?????

foreach (... as $key => ...) {
    $stmt->bind_param('i', $key);
    $stmt->bind_result(...);
    $stmt->execute();
    $stmt->store_result();
    $num_rows = $stmt->num_rows;

    if ($num_rows  > 0) {
       loop results...
    }

   $stmt->free_result();
}

データベースを閉じる

// close database
$conn->close();
4

1 に答える 1

1

クエリを複数回準備する必要はありません。パラメータをバインドして複数回実行するだけです。

PHPマニュアルから:

複数回発行する必要があるクエリの場合、PDO :: prepare()を使用してPDOStatementオブジェクトを準備し、PDOStatement :: execute()を複数回呼び出してステートメントを発行すると、パフォーマンスが向上します。

お役に立てれば。

于 2012-09-11T21:13:20.223 に答える