php和mysqli准备更新正在更新所有行

时间:2013-01-13 04:04:49

标签: php mysqli

我发现使用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。不,其他三个测试行没有last_name = something。 这是库的错误吗?我的PHP配置?也许睡眠不够?什么?

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

1 个答案:

答案 0 :(得分:1)

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