尝试更新数据库中的列,但我不断收到此错误:致命错误:未捕获的PDOException:SQLSTATE [HY093]:

时间:2018-07-28 19:09:58

标签: php database oop pdo crud

这是我不断收到的错误:

  

致命错误:未捕获的PDOException:SQLSTATE [HY093]:无效的参数   number:参数未在中定义   C:\ xampp \ htdocs \ premiumems \ classes \ Admin.php:89堆栈跟踪:#0   C:\ xampp \ htdocs \ premiumems \ classes \ Admin.php(89):   PDOStatement-> execute()#1 C:\ xampp \ htdocs \ premiumems \ process.php(60):   Admin-> update(Array,'1')#2 {main}被抛出   C:\ xampp \ htdocs \ premiumems \ classes \ Admin.php在第89行

public function update($fields, $id)
{
    //$sql= UPDATE admin SET name = :name,

    $st="";
    $counter=1;
    $total_fields=count($fields);

    foreach($fields as $key=>$value)
    {
        if($counter===$total_fields)
        {
            $set="$key=:".$key;
            $st=$st.$set;
        }
        else
        {
            $set="$key=:".$key.",";
            $st=$st.$set;
            $counter++;
        }
    }

    $sql="";
    $sql.= "UPDATE admin SET".$st;
    $sql.=  "WHERE admin_id =".$id;
    $stmt=$this->connection()->prepare($sql);
    foreach ($fields as $key => $value) 
    {
        // code...
        $stmt->bindValue(':' .$key, $value);
    }

    $stmtexec=$stmt->execute();

    if ($stmtexec) 
    {
        // code...
        $reply = "employee updated successfully";
        $_SESSION['success']=$reply;
        header('location:index.php');
    } 
    else 
    {
         // code...

         $reply = "unable to update employee, try again later";
         $_SESSION['failure']=$reply;
         header('location:edit.php?staffid='.$admin_id);
    }
} //function used for updating files

用于处理上述更新过程的类。

1 个答案:

答案 0 :(得分:0)

认为您应该在下面尝试此代码。

import sqlite3
import tqdm
import itertools

with sqlite3.connect(":memory:") as conn:
    with conn as cur:
        cur.execute("create table test(x);")

        strings_to_test = ["{}", "a{}", "{0}{0}", "a{0}{0}", "a({})"]
        # make a list to hold the invalid chars for each test item
        strings_to_test = {x: list() for x in strings_to_test}

        def attempt_insert(string, i, invalid_list):
            try:
                cur.execute("insert into test values ( :{} );".format(string)
                    .format(chr(i)),{"{}".format(string).format(chr(i)): 42})
            except Exception as e:
                invalid_list.append(i)

        # 0x10FFFF is the max value for UTF chars
        for char_num in tqdm.trange(0, 0x10FFFF):
            for string, invalid_char_list in strings_to_test.items():
                attempt_insert(string, char_num, invalid_char_list)

def gen_ranges(i):
    # from https://stackoverflow.com/a/4629241 with changes for Python3
    for a, b in itertools.groupby(enumerate(i), lambda x: x[1] - x[0]):
        b = list(b)
        yield b[0][1], b[-1][1]

def ranges(invalid_chars):
    return "{}".format(["0x{:06x} to 0x{:06x}".format(*range) \
        for range in gen_ranges(invalid_chars)])

print("Invalid Single Chars: ie :x were:                 {}".format(
    ranges(strings_to_test["{}"])))
print("Invalid Single Second Chars: ie :ax were:         {}".format(
    ranges(strings_to_test["a{}"])))
print("Invalid Double Chars: ie :xx were: {}".format(
    ranges(strings_to_test["{0}{0}"])))
print("Invalid Double Chars in second pos: ie :axx were: {}".format(
    ranges(strings_to_test["a{0}{0}"])))
print("Invalid Parenthesised Chars: ie :abc(x) were:     {}".format(
    ranges(strings_to_test["a({})"])))