php - 更新数据库 SQLSTATE[HY093] : Invalid parameter number: number of bound variables does not match number of tokens

标签 php mysql

当用户登录并想要更新配置文件时,我正在创建一个 php 文件。

我收到 SQLSTATE[HY093]:参数数量无效:绑定(bind)变量数量与标记数量不匹配。

编辑配置文件.php

<?php
session_start();
require_once 'class.user.php';
$user_home = new USER();


$stmt = $user_home->runQuery("SELECT * FROM registered_users WHERE userID=:uid");
$stmt->execute(array(":uid"=>$_SESSION['userSession']));
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$_SESSION['email'] = $row['email'];
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>PHP Update Data From MySql - By Cleartuts</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body>
<center>

<h1>Edit Particulars</h1>

<div id="body">
    <div id="content">
    <table align="center" width="100%">


            <tr>
            <td>Full Name</td>
            <td><?php echo $row["fullName"]; ?></td>

            </tr>
            <tr>
            <td>Mobile Number</td>
            <td><?php echo $row['mobileNumber']; ?></td>
            </tr>

            <tr>
            <td>Password</td>
            <td><?php echo $row ['password']; ?></td>
            </tr>

            <tr>
            <td>Address</td>
            <td><?php echo $row['address']; ?></td>
            </tr>

            <tr>
            <td>Postal Code</td>
            <td><?php echo $row['postalCode']; ?></td>
            </tr>

            <tr>
            <td>Edit</td>
            <td><a href="edit_data.php?edit_id=<?php echo $row[0]; ?>"><img src="b_edit.png" alt="Edit" /></a></td>
           </tr>

    </table>
    </div>
</div>


</center>
</body>
</html>

编辑数据.php

<?php
session_start();
require_once 'class.user.php';
$user_home = new USER();
$reg_user = new USER();

$stmt = $user_home->runQuery("SELECT * FROM registered_users WHERE userID=:uid");
$stmt->execute(array(":uid"=>$_SESSION['userSession']));
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$email=$_SESSION['email'];
if(isset($_GET['edit_id']))
{
    $stmt = $user_home->runQuery("SELECT * FROM registered_users WHERE userID=:uid".$_GET['edit_id']);


}
if(isset($_POST['btn-update']))
{
    // variables for input data

    $fullName = $_POST['fullName'];

    $mobileNumber = $_POST['mobileNumber'];

    $password = $_POST['password'];
    $address = $_POST['address'];
    $postalCode = $_POST['postalCode'];
    // variables for input data

    // sql query for update data into database

        if($reg_user->updateUser($fullName,$mobileNumber,$password,$address,$postalCode,$email))
        {

            echo"good";
            ?>
            <script>
            alert('Data Are Updated Successfully');
            window.location.href='home.php';
            </script>
            <?php 
        }
        else
        {
            echo "sorry ,Pleae go to nearest NPC to register.";
            ?>
            <script>
            alert('error occured while updating data');
            </script>
            <?php 
        }



}
if(isset($_POST['btn-cancel']))
{
    header("Location: home.php");
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>PHP Update Data From MySql - By Cleartuts</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body>
<center>

<div id="header">
    <div id="content">
    <label>PHP PHP Update Data From MySql - By Cleartuts</label>
    </div>
</div>
<div id="body">
    <div id="content">
    <form method="post">
    <table align="center">
    <tr>
    <td>Full Name</td>
    <td><input type="text" name="fullName" placeholder="full Name" value="<?php echo $row['fullName']; ?>" required /></td>
    </tr>
    <tr>
    <td>Mobile Number</td>
    <td><input type="text" name="mobileNumber" placeholder="mobile Number" value="<?php echo $row['mobileNumber']; ?>" required /></td>
    </tr>

    <tr>
    <td>Password</td>
    <td><input type="password" name="password" placeholder="password" value="<?php echo $row['password']; ?>" required /></td>
    </tr>

    <tr>
    <td>Address</td>
    <td><input type="text" name="address" placeholder="Blk 123 Ang Mo kio Ave 1 #12-112" value="<?php echo $row['address']; ?>" required /></td>
    </tr>

    <tr>
    <td>Postal Code</td>
    <td><input type="text" name="postalCode" placeholder="123456" value="<?php echo $row['postalCode']; ?>" required /></td>
    </tr>
    <tr>
    <td>
    <button type="submit" name="btn-update"><strong>UPDATE</strong></button>
    <button type="submit" name="btn-cancel"><strong>Cancel</strong></button>
    </td>
    </tr>
    </table>
    </form>
    </div>
</div>



</center>
</body>
</html>

功能

public function updateUser($fullName,$mobileNumber,$password,$address,$postalCode,$email)
    {
        try
        {

            $password = md5($password);
            $stmt = $this->conn->prepare("UPDATE SET  registered_users (fullName=:fullName,mobileNumber=:mobileNumber,password=:password,address=:address,postalCode=:postalCode WHERE email=:email_id");
            $stmt->execute(array(":email_id"=>$email));
            $userRow=$stmt->fetch(PDO::FETCH_ASSOC);

            $stmt->bindparam(":fullName",$fullName);

            $stmt->bindparam(":mobileNumber",$mobileNumber);

            $stmt->bindparam(":password",$password);
            $stmt->bindparam(":address",$address);
            $stmt->bindparam(":postalCode",$postalCode);



            $stmt->execute();
            return $stmt;
        }
        catch(PDOException $ex)
        {
            echo $ex->getMessage();
        }
    }

最佳答案

您还有更多参数 (:fullName, :mobileNumber, :password, ......)

但你只绑定(bind)一个:email_id

$stmt = $this->conn->prepare("UPDATE SET  registered_users  
       (fullName=:fullName,mobileNumber=:mobileNumber,
       password=:password,address=:address,postalCode=:postalCode WHERE email=:email_id");
        $stmt->execute(array(":email_id"=>$email));

关于php - 更新数据库 SQLSTATE[HY093] : Invalid parameter number: number of bound variables does not match number of tokens,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37405581/

相关文章:

mysql - 从 SQL 中的每一天获取具有特定列的最后一行

java - 向群组发送消息(通知) - Android

php - 数据库链接不起作用

php - 在 PHP 中为 HTML 选择控件设置默认值

php - 在 if with 和/或 PHP 语句中正确使用括号

php - 用于与 AS 连接同一张表的 codeigniter 代码

c# - 使用 c#.net winforms 从 mysql 数据库中选择 - 如何检查响应?

php - 分组依据中的第一个和最后一个记录。无法到达最后

php - jquery ajax 返回空值

mysql - 使用 group by 和 order by 时获得最低值