2

私はプリペアドステートメントの使用にまったく慣れておらず、各呼び出しの後にstmt_init()を閉じる必要があるのか​​、それとも開いたままにしておくのか疑問に思っています。

$stmt = $mysqli->stmt_init();

if($stmt->prepare("SELECT player_draws, player_turn, player_passes, swapped FROM ".$prefix."_gameplayer WHERE fk_game_id = ? AND fk_player_id = ?")){

    $stmt->bind_param('ii', $currgame, $playerid);
    $stmt->execute();
    $stmt->bind_result($udraws, $uturn, $upass, $uswaps);
    $stmt->fetch();

    echo $udraws.'-'.$uturn.'-'.$upass.'-'.$uswaps.'<br>';

    // Close statement object
    $stmt->close(); 

}

$stmt = $mysqli->stmt_init();

if($stmt->prepare("SELECT player_draws, player_turn, player_passes, swapped FROM ".$prefix."_gameplayer WHERE fk_game_id = ? AND fk_player_id != ?")){

    $stmt->bind_param('ii', $currgame, $playerid);
    $stmt->execute();
    $stmt->bind_result($odraws, $oturn, $opass, $oswaps);
    $stmt->fetch();

    echo $odraws.'-'.$oturn.'-'.$opass.'-'.$oswaps.'<br>';

    // Close statement object
    $stmt->close(); 

}

それらの1つは、呼び出しを考慮したデータベースに適していますか?

前もって感謝します!

4

1 に答える 1

1

...プリペアドステートメントまたはパラメーター化されたステートメントを使用して、同じステートメントを高効率で繰り返し実行します。

編集 クエリは異なるため、それぞれを個別に準備する必要がありますが、$ mysqli-> stmt_init();を再利用できるはずです。

ちなみに、誰かがコメントでこれに言及しています:

*大規模な操作のためにbind_paramなどを使用してループ内でステートメントを繰り返す場合。stmt->closeでクリーンアップするとよいでしょう。しかし、それは約の後にエラーで常に壊れました。250回の操作。stmt-> resetで試してみたところ、うまくいきました。*

于 2013-01-17T07:51:51.573 に答える