如何使用预准备语句更新循环中的多个行

时间:2017-09-28 09:38:16

标签: php mysql mysqli

我试图从MySql数据库中收集一系列ID,并使用一些值更新每个ID:

global $conn;

$teams = getTeams(); // ID's
$query = "UPDATE t_teams
SET logo = ? WHERE id_team = ?";
foreach($teams as $row) {
   $currDir = explode('/', $row["logo"]);
   $stmt = $conn->prepare($query);
   $stmt->bind_param("si", $currDir[5], $row["id_jogo"]);
   $stmt->execute();
}

我知道bind_param不会像这样工作。有很多关于此的信息,但我无法将其改编为我的代码。

我认为这与我想要的很接近:http://php.net/manual/en/mysqli-stmt.bind-param.php#104073

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:0)

出于某种原因,我不知道为什么,$statement->bindParam()不能在循环中工作。您可以尝试在PDO上使用$statement->bindValue(),如果当然没有太多工作要切换到PDO。

像这样:

global $conn;

$teams = getTeams(); // ID's

$query = "UPDATE t_teams
SET logo = ? WHERE id_team = ?";

$stmt = $conn->prepare($query);

$indexCount = 0;

foreach($teams as $row) {
   $currDir = explode('/', $row["logo"]);

   $stmt->binValue(++$indexCount, $currDir[5]);

   $stmt->execute();
}

答案 1 :(得分:-1)

尝试更改语句以使用如下所示的命名占位符:

"UPDATE t_teams SET logo = :logo WHERE id_team = :team"

然后以这种方式绑定值:

$stmt->bind_param("logo", $row["logo"]);
$stmt->bind_param("team", $row['id_jogo']);