我试图理解准备好的陈述,然后为此做一个准备好的陈述:
// 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个第一个字段???可以这样做吗?
提前致谢。
答案 0 :(得分:0)
简答:准备好的陈述有固定的参数。如果要执行具有不同参数计数的两个查询,则需要准备两个语句 - 每个更新类型一个。
答案很长:你可能会使用脏黑客,比如在可选参数上创建一个CASE语句,比如
SET x=CASE WHEN something THEN ? ELSE x END
但它真的值得吗?它使查询更复杂,更难维护。当你需要修改其中一个查询时会发生什么?