使用具有不同字段数量和准备语句的UPDATE

时间:2013-01-17 10:42:51

标签: php mysqli prepared-statement

我试图理解准备好的陈述,然后为此做一个准备好的陈述:

// 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");

我正在考虑这样做,但我正在徘徊如何确保不更新第二个声明中的某些字段:

$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个第一个字段???可以这样做吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

简答:准备好的陈述有固定的参数。如果要执行具有不同参数计数的两个查询,则需要准备两个语句 - 每个更新类型一个。

答案很长:你可能会使用脏黑客,比如在可选参数上创建一个CASE语句,比如

SET x=CASE WHEN something THEN ? ELSE x END

但它真的值得吗?它使查询更复杂,更难维护。当你需要修改其中一个查询时会发生什么?