PDO查询引发致命错误,指出绑定变量与令牌数不匹配

时间:2017-04-24 08:24:50

标签: php mysql 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的数据库。

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

我的第一部分执行时没有任何错误,但第二部分抛出并且错误&#34;绑定变量的无效参数编号与&#34; 中的标记数不匹配。

我尝试回显所有设置的数据,如果函数全部被回显但仍然这给了我错误我真的无法找到我做错了请帮助我下面的一些是我的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:这不是其他帖子的DUPLICATE标记看内容这是一个错误,我看到我是绑定值到错误的查询首先你们需要在标记前阅读这个。提到的链接并没有解决我的问题它甚至没有接近我所要求的。错误是一样的,但问题不同。

更新:我只是想在昨天的评论部分发表重大声明表示抱歉我真的很抱歉行为非常不成熟我感到很沮丧导致我很抱歉试。

1 个答案:

答案 0 :(得分:3)

错误与此代码有关。您将params绑定到不同的查询对象。

$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