php - 为什么这个 UPDATE 过程更新每一行?

标签 php mysql sql

我有一个像这样的 MySQL 存储过程

UPDATE `Discounts` SET `Occupation`=occupation,
`Organization`=organization,
`LastName`=lastName,
`FirstName`=firstName,
`Email`=email,
`Phone`=phone,
`Description`=description,
`ExpirationDate`=expiration,
`Notes`=notes 
  WHERE `ID` = id

我用这个 PHP 调用它

$occupation = $_POST["occupation"];
$organization = $_POST["organization"];
$last = $_POST["last"]; 
$first = $_POST["first"]; 
$email = $_POST["email"];
$phone = $_POST["phone"]; 
$description = $_POST["description"];
$notes = $_POST["notes"];
$expiration = date("Y-m-d H:i:s", strtotime($_POST["expiration"]));
$id = intval($_POST["id"], 10);

$password = $_POST["password"];

$mysqli = new mysqli("localhost", "xxx", $password, "xxxxxxxx");
if ($mysqli->connect_errno) {
    die("Could not connect");
}
$stmt = mysqli_stmt_init($mysqli);
if (mysqli_stmt_prepare($stmt, 'CALL UpdateDiscount(?,?,?,?,?,?,?,?,?,?)')) {
    mysqli_stmt_bind_param($stmt, "isssssssss", 
      $id, 
      $occupation, 
      $last, 
      $first,
      $email, 
      $phone, 
      $description,
      $organization,
      $notes,
      $expiration);
  mysqli_stmt_execute($stmt);
  mysqli_stmt_close($stmt);
  echo "Success!";
}

除了更新每一行而不是与 ID 对应的一行之外,更新完全按照我的预期工作。我不明白为什么会这样,我有一个 WHERE 'ID'=id 检查。到底是怎么回事?我怎样才能让它只更新一行?

最佳答案

因为 `ID` 是您的列的区分大小写的名称,而 id 是同一列的不区分大小写的名称。

编辑这是错误的:您应该使用小写 id 所在的 PHP 变量。类似于 $id。

在您的情况下,您正在调用一个带有绑定(bind)参数的过程。

id 参数使用不同的名称。

这是属于过程的名称范围局部变量与属于过程的参数变量与表列名称的问题。

关于php - 为什么这个 UPDATE 过程更新每一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10897872/

相关文章:

php - php中的sql不工作可能是编码?

php - 如何在 PHP/MySQL 中回显随机行?

mysql - 使用触发器相互依赖的多个 sql 查询

mysql - 导入的用户 ID 和主键?

php - 根据搜索字符串出现次数对数组进行排序 php

mysql - SELECT 仅由指定字母组成的单词

SQL Server : selecting rows that contain only certain values?

php - 如何从字符串中提取大写单词

javascript - Adobe Muse 联系我们小部件

php - native $_POST 或 $_GET 元素