Php PDO语句执行时出现Fatel错误(数组)

Php PDO语句执行时出现Fatel错误(数组),php,pdo,Php,Pdo,我创建了一个可以插入数据库的函数,只需向其中传递两个参数[表名,关联数组“表模式”]。数组包含列名及其值。 首先是数组外观: $tableSchema = [ 'member_name' => $member_name, 'member_pass' => $member_pass, 'member_email' => $member_email, 'member_fullname'

我创建了一个可以插入数据库的函数,只需向其中传递两个参数[表名,关联数组“表模式”]。数组包含列名及其值。 首先是数组外观:

$tableSchema = [
        'member_name'       => $member_name,
        'member_pass'       => $member_pass,
        'member_email'      => $member_email,
        'member_fullname'   => $member_fullname,
        'member_image'      => $profileImage,
        'member_role'       => $member_role,
        'member_gender'     => $member_gender,
        'member_phone'      => $member_phone,
        'member_country'    => $member_country,
    ];
这就是我的功能代码:

 function insertInto($table, $columns)
 {   

    // This function to echo parameters at sql stmt 
    function setParams($columns)
    {
        $param = '';
        foreach($columns as $key => $value) {
            $param .= $key . ' = :' . $key . ', ';
        }
        return trim($param, ',');
    }


    $array = [];
    foreach ($columns as $key => $value) {
        array_push($array, $key);
    }

    global $db_connect;
    $stmt = $db_connect->prepare('INSERT INTO '. $table .' SET '. setParams($columns) .'');
    $stmt->execute($array); /* Here is my problem */
 }
当我尝试运行函数时,会出现以下错误:

致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[HY093]:参数编号无效:C:\xampp\htdocs\blogfive\core\functions\functions.php:87堆栈跟踪:#0 C:\xampp\htdocs\blogfive\core\functions\functions.php(87):PDOStatement->execute(Array)#1 C:\xampp\htdocs\blogfive\dashboard\template\pages\members\insert.member.php(65):insertInto('members',Array)#2 C:\xampp\htdocs\blogfive\dashboard\members.php(32):在第87行的C:\xampp\htdocs\blogfive\core\functions\functions.php中抛出一次('C:\xampp\htdocs\htdocs\htdocs…')#3{main}


$array
是错误的参数名称数组。您需要一个关联数组,其中键是参数名称和值,实际值如下所示:

 function insertInto($table, $columns)
 {   

    // This function to echo parameters at sql stmt 
    function setParams($columns)
    {
        $param = '';
        foreach($columns as $key => $value) {
            $param .= $key . ' = :' . $key . ', ';
        }
        return trim($param, ',');
    }
    global $db_connect; // Bad practice, try to find an alternative

    $stmt = $db_connect->prepare('INSERT INTO '. $table .' SET '. setParams($columns) .'');
    $stmt->execute($columns); 
 }

@我们也可以在INSERT中使用SET。apokryfos anwsers是正确的为什么需要嵌套函数?运行循环并用结果设置字符串同样容易。