PHP 致命错误。未捕获异常'PDOException',消息为'SQLSTATE[HY093].Invalid parameter number: parameter was not defined'。无效的参数号:参数未被定义。

问题描述 投票:-2回答:1

我无法让下面的PDO语句正常工作。

<?php
    // Update (Edit) user details in DB

    // DB Connection include
    include_once('connstring.inc.php');
    //include_once('key.inc.php'); // Not necessary for update as UID is already generated

    $User_ID = $_POST['user_id'];
    $First_Name = ucfirst($_POST['first_name']);
    $Last_Name = ucfirst($_POST['last_name']);
    $Address = $_POST['address'];
    $Phone = $_POST['phone'];
    $District = ucfirst($_POST['district']);
    $State = ucfirst($_POST['state']);
    $Country = ucfirst($_POST['country']);
    $Pin_Code = $_POST['pin_code'];
    $Email = $_POST['email'];
    $User_Name = $_POST['user_name'];
    //$UID = $_POST['UID'];
    $Admin_Group = $_POST['admin_group'];
    $Admin_Status = $_POST['admin_status'];

    // Update DB with new values
    $sql = "UPDATE admin_user SET first_name = :firstname, last_name = :lastname, address=  :address, phone = :phone, district = :district, state = :state, country =     :country,pin_code = :pincode, email = :email, user_name = :username, admin_group =    :admingroup, admin_status = :adminstatus WHERE user_id = :userid";
    $stmt = $conn->prepare($sql);
    $stmt->execute(array(':firstname'=>$First_Name, ':lastname'=>$Last_Name,  ':address'=>$Address, ':phone'=>$Phone, ':district'=>$District,':state'=>$State,':country'=>$Country,':pincode'=>$Pin_Code,':email' >$Email,':username'=>$User_Name,':admingroup'=>$Admin_Group,':admin_status'=>$Admin_Status, :userid'=>$User_ID));
    $conn = null;
    //Return result to jTable
    $jTableResult = array();
    $jTableResult['Result'] = "OK";
    print json_encode($jTableResult);
?>

My MySQL table structure is as follows:
======================================
    (DB Name:admin_user)

    user_id
        first_name
        last_name
        address
        phone
        district
            state
        country
            pin_code
        email
        user_name
        password
        UID
        admin_group
        admin_status

我使用的是当前版本的jQuery jtable插件。在同一个表中插入工作正常。但在尝试更新时,我得到了。

PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]. Invalid parameter number: parameter was not defined' in varwww: Invalid parameter number: parameter was not defined' in varwwwtest.compublic_htmladminadminedituser.php:28n/Stack trace:\n#0 varwwwtest.compublic_htmladminadminedituser.php(28): PDOStatement->execute(Array)/n#1 {main}/n#1在varwwwtest.compublic_htmladminadminedituser.php第28行中被丢弃

我怎样才能解决这个问题?

pdo
1个回答
-1
投票
<?php
    /* 
     * Update (Edit) user details in DB
     * DB Connection include
     */
    include_once('connstring.inc.php'); 

    $user_info_arr = [];
    foreach($_POST as $key => $val)
    {
        $user_info_arr[$key] = $val;
    }

    //update DB with new values
    $query = "UPDATE `admin_user` SET 
                                  `first_name`      = :firstname, 
                                  `last_name`       = :lastname, 
                                  `address`         = :address, 
                                  `phone`           = :phone, 
                                  `district`        = :district, 
                                  `state`           = :state, 
                                  `country`         = :country,
                                  `pin_code`        = :pincode, 
                                  `email`           = :email, 
                                  `user_name`       = :username, 
                                  `admin_group`     = :admingroup, 
                                  `admin_status`    = :adminstatus 
                              WHERE 
                                  `user_id` = :userid";

    $stmt = $conn->prepare($query);
    $stmt->execute(
            array(
                ':firstname'    =>  ucfirst($user_info_arr['first_name']), 
                ':lastname'     =>  ucfirst($user_info_arr['last_name']),  
                ':address'      =>  $user_info_arr['address'], 
                ':phone'        =>  $user_info_arr['phone'], 
                ':district'     =>  ucfirst($user_info_arr['district']),
                ':state'        =>  ucfirst($user_info_arr['state']),
                ':country'      =>  ucfirst($user_info_arr['country']),
                ':pincode'      =>  $user_info_arr['pin_code'],
                ':email'        =>  $user_info_arr['email'],
                ':username'     =>  $user_info_arr['user_name'],
                ':admingroup'   =>  $user_info_arr['admin_group'],
                ':adminstatus'  =>  $user_info_arr['admin_status'], 
                ':userid'       =>  $user_info_arr['user_id']
            )
    );

    $conn = null;

    //Return result to jTable
    $jTableResult = [];
    $jTableResult['Result'] = "OK";
    print json_encode($jTableResult);
?>

我也花了不少时间来清理你的代码。而且真的使用$_POST并传递到一个单独的变量是非常丑陋的,而是使用一个数组......

试着检查一下现在是否能用。

© www.soinside.com 2019 - 2024. All rights reserved.