1

我发现使用 mysqli 的准备更新正在更新我的表中的所有行,而不是 WHERE 子句中引用的行。我对发生这种情况的原因感到困惑。我使用下面的简化代码作为测试运行,它仍然会发生。我正在使用 PHP 5.3.18 和客户端 API 库版本 5.0.96。

$mysqli = new mysqli("localhost", "user", "pass", "db");
if (mysqli_connect_errno()) {
  printf("Connect failed: %s\n", mysqli_connect_error());
  exit();
}

$query = "UPDATE test SET first_name = ? WHERE last_name = ?";
if(!$stmt = $mysqli->prepare($query)) {
  die("Unable to prepare<br />");
}

$first = 'test';
$second = 'something';

$stmt->bind_param("ss", $first, $second);
if (!$stmt->execute()) {
  die("Could not execute<br />");
}

echo "done";

查询执行,但为表中的所有行更新了 first_name。是的,有一个带有“某物”的姓氏。不,其他三个测试行没有 last_name = something。这是图书馆的问题吗?我的 PHP 配置?也许睡眠不足?什么?

哦......另外......如果我使用像“UPDATE test SET first_name =?WHERE id =?”这样的查询 并更新参数以使用 id,它可以工作。它只更新单行。那么为什么我不能在 WHERE 子句中使用 last_name 列呢?

4

1 回答 1

1

我让服务器技术人员将我的服务器更新到 MySql 5.5,现在问题已解决。我猜它与库或 MySql 安装有关。

于 2013-01-13T17:41:06.863 回答