0

私は準備されたステートメントを理解しようとしており、これに対して準備されたステートメントを作成したいと思っています:

// UPDATE GAME PLAYERS DATA IN DB // 
mysql_query("UPDATE ".$prefix."_gameplayer SET player_tiles='$playertiles'
                                             , player_draws='$udraws'
                                             , player_turn=0
                                             , last_draw_type=1 
                                WHERE fk_player_id=$playerid AND fk_game_id=$currgame");

// UPDATE GAME OPPONENTS DATA IN DB //  
mysql_query("UPDATE ".$prefix."_gameplayer SET player_turn=1
                                             , last_draw_type=2 
                                WHERE fk_player_id=$opponent AND fk_game_id=$currgame");

私はこれを行うことを考えていましたが、2番目のステートメントでいくつかのフィールドを更新しないようにする方法をさまよっています:

$stmt->prepare("UPDATE ".$prefix."_gameplayer SET player_tiles='?'
                                             , player_draws=?
                                             , player_turn=?
                                             , last_draw_type=? 
                                WHERE fk_player_id=? AND fk_game_id=?");

$stmt->bind_param('siiiii', $playertiles,$udraws,0,1,$playerid,$currgame);
$stmt->execute();

$stmt->bind_param('siiiii', ?,?,1,2,$playerid,$currgame);
$stmt->execute();

2 番目のステートメントでは、最初の 2 つのフィールドを更新したくありませんか??? これはできますか?

前もって感謝します。

4

1 に答える 1

0

簡単な答え: プリペアド ステートメントには固定パラメーターがあります。パラメーター数が異なる 2 つのクエリを実行する場合は、更新の種類ごとに 1 つずつ、2 つのステートメントを準備する必要があります。

長い答え: オプションのパラメーターで CASE ステートメントを作成するなど、汚いハックを使用することができます。

SET x=CASE WHEN something THEN ? ELSE x END

しかし、それは本当に価値がありますか?これにより、クエリがはるかに複雑になり、保守が難しくなります。クエリの 1 つだけを変更する必要がある場合はどうなるでしょうか。

于 2013-01-17T10:55:57.170 に答える