2013-01-17 30 views
0

我想了解准备好的发言和wnat,以弥补这方面一份准备好的声明:使用不同数量的字段UPDATE和预处理语句

// 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

只需运行2个独立的查询,就像你用mysql做的那样。有什么问题? –

回答

0

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

龙答:你可以使用脏的黑客,如创建了可选参数的CASE语句,像

SET x=CASE WHEN something THEN ? ELSE x END 

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

+0

因此,如果我不能使用准备好的语句来替换2个插入,那么正常的mysqli查询同样好? – Mansa

+0

您的mysql_query示例容易受到SQL注入的影响,而准备好的语句不适用。 – Dutow

+0

但是在连接和执行时间方面没有获得什么? – Mansa