代码之家  ›  专栏  ›  技术社区  ›  DanMad

使用sql/php更新记录时出现问题

  •  1
  • DanMad  · 技术社区  · 6 年前

    我对php很陌生。如果这是一个基本问题,请道歉。

    我正在尝试使用php/sql更新记录。我已通过谷歌搜索此错误,但无法从代码上下文中确定问题:

    出现错误:sqlstate[hy093]:无效参数号:绑定变量数与令牌数不匹配

    以下是我的功能:

    function updateTeam($val) {
    
      global $server, $db, $dbUser, $dbKey, $message;
    
      try {
        $conn = new PDO("mysql:host=" . $server . ";dbname=" . $db, $dbUser, $dbKey);
        $conn -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
        $sql = $conn -> prepare("UPDATE Team SET teamName=:teamName, teamLogo=:teamLogo, WHERE teamID=" . $val);
    
        $sql -> bindValue(":teamID", $_POST["teamID"]);
        $sql -> bindValue(":teamName", $_POST["teamName"]);
        $sql -> bindValue(":teamLogo", $_POST["teamLogo"]);
    
        $result = $sql -> execute();
    
        if ($result) {
          $message = "Customer record was updated";
        } else {
          $message = "The Customer record was not updated";
        }
      }
    
      catch(PDOException $e) {
        echo "<div class='notification container'><p>An error occured: " . $e -> getMessage() . "</p></div>";
      }
    
      $conn = null;
    }
    
    if (isset($_POST["updateTeam"])) {
      updateTeam($_POST["teamID"]);
    }
    

    这是我的标记:

    <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
      <label>Team ID</label>
      <input type="text" name="teamID" placeholder="9" value="<?php echo $teamID; ?>">
      <label>Team name</label>
      <input type="text" name="teamName" placeholder="Watson's Bay Warriors" value="<?php echo $teamName; ?>">
      <label>Team logo (optional)</label>
      <input type="text" name="teamLogo" placeholder="Blob" value="<?php echo $teamLogo; ?>">
      <input type="submit" name="insertTeam" value="Add">
      <input type="submit" name="getTeam" value="Get">
      <input type="submit" name="updateTeam" value="Update">
      <input type="submit" name="deleteTeam" value="Delete">
    </form>
    

    我有类似的功能,使我可以添加,获取和删除,没有问题。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Michael    6 年前
    "UPDATE Team SET teamName=:teamName, teamLogo=:teamLogo WHERE teamID=:teamID")
    

    删除where子句前的逗号

        2
  •  0
  •   Luay    6 年前

    在你的代码中:

     $sql = $conn -> prepare("UPDATE Team SET teamName=:teamName, teamLogo=:teamLogo, WHERE teamID=" . $val);
    
     $sql -> bindValue(":teamID", $_POST["teamID"]);
     $sql -> bindValue(":teamName", $_POST["teamName"]);
     $sql -> bindValue(":teamLogo", $_POST["teamLogo"]);
    

    为什么teamid=“..$val但您将param teamid绑定到post值?可能是这个错误吗?