簡體   English   中英

為什么此UPDATE過程更新每一行?

[英]Why does this UPDATE procedure update every row?

我有一個這樣的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是同一列的不區分大小寫的名稱。

編輯這是錯誤的 :您應該使用一個PHP變量,其中小寫的id是。 類似於$ id。

在您的情況下,您正在調用帶有綁定參數的過程。

id參數使用其他名稱。

這是一個將作用域命名為過程的名稱范圍局部變量,而屬於該過程的參數變量與表列名稱是一個問題。

在存儲過程中,當字段名稱和參數名稱之間發生名稱沖突時,將使用參數。

您的查詢被解析為:

UPDATE  ...
WHERE   :id = :id

這始終是正確的(除非您傳遞NULL

在參數名稱前加上下划線:

CREATE PROCEDURE myprc (_id, _occupation, ...)
AS
BEGIN
        UPDATE  mytable
        SET     occupation = _occupation
        WHERE   id = _id;
END;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM