PDO查询会引发一个致命错误,说明绑定变量与令牌数量不匹配

PDO查询会引发一个致命错误,说明绑定变量与令牌数量不匹配

问题描述:

此脚本具有在此窗体中输入用户数据的窗体,其中有一个复选框用于标记该用户是否为团队负责人。而且我使用另一个脚本来检查该球队是否有球队领队,如果该球队有领导者,球队领队复选框将被禁用。PDO查询会引发一个致命错误,说明绑定变量与令牌数量不匹配

这是形式:

<?php 
/** 
* Created by PhpStorm. 
* User: SiNUX 
* Date: 4/6/2017 
* Time: 3:41 PM 
*/ 

session_start(); 
include_once("../iConnect/handShake.php"); 

$getUserRole = "SELECT * FROM userroles ORDER BY urId ASC"; 
$getUserRoleQuery = $dbConnect -> query($getUserRole); 
?> 

<html> 
<head> 
    <title>Timer User Creation</title> 
    <meta charset="UTF-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <!-- Style Sheets --> 
    <link rel="stylesheet" type="text/css" href="../../CSS/main.css"> 

    <!-- Java Scripts --> 
    <script language="JavaScript" type="text/javascript" src="../../jScripts/jquery-3.2.0.min.js"></script> 
    <script language="javascript" type="text/javascript" src="../../jScripts/svrTimeDate.js"></script> 
    <script language="JavaScript" type="text/javascript" src="../../jScripts/reload.js"></script> 
    <script language="JavaScript" type="text/javascript" src="../../jScripts/setMsg.js"></script> 
    <script language="JavaScript" type="text/javascript" src="../../jScripts/userCreatFunctions.js"></script> 
    <script language="JavaScript" type="text/javascript" src="../../jScripts/multiScript.js"></script> 
    <script language="JavaScript" type="text/javascript" src="../../jScripts/getIds.js"></script> 

</head> 
<body onload="pauseLoad4()"> 
    <div id="divCenter" class="box"> 
     <label id="userName">Hello <?php echo $_SESSION["fName"]." ".$_SESSION["lName"]; ?></label><br><br> 
     <label id="uId" hidden>1</label> 
     <div style="width: 166px; position: absolute; left: 642px; top: 20px; height: 44px;"> 
      <img src="../../images/logo.png" width="142" height="33"> 
     </div> 
     <label for="date">Date:</label> 
     <label id="date" style="margin-left: 50px;"></label><br><br> 
     <label for="fName">First Name:</label> 
     <input type="text" id="fName" name="fName" style="margin-left: 10px;" onkeyup="checkEmpty();"> 
     <label for="lName" style="margin-left: 8px;">Last Name:</label> 
     <input type="text" id="lName" name="lName" style="margin-left: 10px;" onkeyup="checkEmpty();" disabled> 
     <label for="uName" style="margin-left: 8px;">User Name:</label> 
     <input type="text" id="uName" name="uName" style="margin-left: 7px;" onkeyup="checkEmpty();" disabled><br><br> 
     <label for="pWord1" style="margin-left: 8px;" >Password:</label> 
     <input type="password" id="pWord1" name="pWord1" style="margin-left: 17px;" onkeyup="checkLength();" disabled> 
     <label for="pWord2" style="margin-left: 8px;">Confirm Password:</label> 
     <input type="password" id="pWord2" name="pWord2" style="margin-left: 8px;" onkeyup="checkPass();" disabled> 
     <label for="uTeam" style="margin-left: 8px;">Team</label> 
     <select name="uTeam" id="uTeam" style="width: 170px;" onchange="teamId(this.id);enableRoles();" disabled> 
      <option></option> 
     </select> 
     <input type="text" name="uTeamId" id="uTeamId" hidden><br><br> 
     <div id="userRoles"> 
      <label for="userRoles">User Role:</label><label for="uAttrib" style="margin-left: 250px;">User Attributes:</label><br> 
      <?php while ($row = $getUserRoleQuery -> fetch(PDO::FETCH_ASSOC)) { ?> 
       <input type="radio" class="userRoles" name="userRoles" value="<?php echo $row["urId"]; ?>" disabled><?php echo $row["userRole"]; }?> 
       <input type="checkbox" id="tl" name="tl" value="yes" style="margin-left: 120px;" disabled>Team Leader 
     </div> 
     <label id="msgID" hidden></label> 
     <div id="msg"></div> 
     <div id="sbmBtns"> 
      <input type="button" value="Reset" name="reset" id="reset" class="btn" onclick="resetForm()"> 
      <input type="button" value="Submit" name="submit" id="submit" class="btn" onclick="pauseLoad3();" disabled> 
     </div> 
    </div> 
</body> 
</html> 

所有收集的是针对我的PHP页面处理这个页面也有2个部分第一个查询执行和用户的详细信息到一个数据库,称为用户登陆的数据。

第二部分是在第一个从userlogin数据库获取最后一个添加的id之后执行的,然后在我的团队数据库中更新用户ID并设置一个值来指定该特定团队是否有领导者。

我的第一部分执行时没有发现任何错误,但第二部分抛出错误“绑定变量的无效参数号码数量与”中的令牌数量不匹配“。

我试着回应所有的数据,如果功能全部被回显但仍然这给了我那个错误我真的找不到我在做什么错,请帮助我下面的一些是我的PHP代码。

PHP:

<?php 
/** 
* Created by PhpStorm. 
* User: SiNUX 
* Date: 4/7/2017 
* Time: 12:15 PM 
*/ 

include_once("../iConnect/handShake.php"); 

if (isset($_REQUEST["tl"])){ 
    //Have to use the intermediate variable as work around to warning massage 
    // Strict standards: Only variables should be passed by reference 
    $intPword = md5($_REQUEST["pword"]); 

    $addUser = "INSERT INTO userlogin (uCreateDate, createdBy, fName, lName, uName, pWord, uTeam, uRole) VALUES (:uCreateDate, :uId, :fName, :lName, :uName, :pWord, :uTeam, :uRole)"; 
    $addUserQuery = $dbConnect -> prepare($addUser); 
    $addUserQuery -> bindParam(':uCreateDate', $_REQUEST["udate"]); 
    $addUserQuery -> bindParam(':uId', $_REQUEST["uId"]); 
    $addUserQuery -> bindParam(':fName', $_REQUEST["fName"]); 
    $addUserQuery -> bindParam(':lName', $_REQUEST["lName"]); 
    $addUserQuery -> bindParam(':uName', $_REQUEST["uName"]); 
    $addUserQuery -> bindParam(':pWord', $intPword); 
    $addUserQuery -> bindParam(':uTeam', $_REQUEST["team"]); 
    $addUserQuery -> bindParam(':uRole', $_REQUEST["uRole"]); 

    if ($addUserQuery -> execute()){ 
     $lastUid = $dbConnect -> lastInsertId(); 

     if (isset($lastUid)){ 
      $addTl = "UPDATE teams SET tlName = :tlName, tlSet = :tlSet WHERE tId = :tId"; 
      $addTlQuery = $dbConnect -> prepare($addTl); 
      $addUserQuery -> bindParam(':tId', $_REQUEST["team"]); 
      $addUserQuery -> bindParam(':tlName', $lastUid); 
      $addUserQuery -> bindParam(':tlSet', $_REQUEST["tl"]); 
      echo $lastUid. " Last ID<br>"; 
      echo $_REQUEST["tl"]. " TL<br>"; 
      echo $_REQUEST["team"]; 

      if ($addUserQuery -> execute()){ 
       echo "1"; 
      }else{ 
       echo "11"; 
      } 
     } 
    }else{ 
     echo "10"; 
    } 

}else{ 
    echo "3"; 
} 

UPDATE:这是一个错误,我在看到我第一次你的人的结合值到错误的查询这不是重复其他一些岗位作为在内容标注的样子需要在标记之前阅读此内容。并提到的链接并没有解决我的问题,它甚至不接近我问。错误是相同的,但问题不同。

更新:我只想说抱歉在昨天的评论部分做出一个大咆哮我真的很抱歉表现得很不成熟我很沮丧,导致这个我很抱歉。

+1

'bindParam'在第二查询必须呼吁'$ addTlQuery' –

+0

[PHP的MySQL的PDO绑定变量的数量的可能的复制不匹配的令牌数量](http://*.com/questions/9331291/php-mysql-pdo-number-of-bound-variables-does-not-match-number-of-tokens) –

+0

你在标记这个@MasivuyeCokile之前有没有读过你不仅仅是帮助。 – Sand

错误与此代码。您将参数绑定到不同的查询对象。

$addTl = "UPDATE teams SET tlName = :tlName, tlSet = :tlSet WHERE tId = :tId"; 
      $addTlQuery = $dbConnect -> prepare($addTl); 
      $addUserQuery -> bindParam(':tId', $_REQUEST["team"]); 
      $addUserQuery -> bindParam(':tlName', $lastUid); 
      $addUserQuery -> bindParam(':tlSet', $_REQUEST["tl"]); 
      echo $lastUid. " Last ID<br>"; 
      echo $_REQUEST["tl"]. " TL<br>"; 
      echo $_REQUEST["team"]; 

      if ($addUserQuery -> execute()){ 
       echo "1"; 
      }else{ 
       echo "11"; 
      } 

您需要更新$addUserQuery$addTlQuery

+0

该死的真的很感谢你我真的没有看到我现在可以自杀。 – Sand

+0

如果系统让我无法做到这一点为5米某些原因,我去吃午餐,所以不要这样...... – Sand

+0

@杰克,有点不要说的话。他只是建议你投票它有帮助,所以它会帮助其他人查看这个主题谁是在相同的情况。 – Option