【问题标题】:Fatel error at PDOStatement execute(Array) [duplicate]PDOStatement execute(Array) 处的致命错误 [重复]
【发布时间】:2019-12-11 07:03:02
【问题描述】:

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

$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 */
 }

当我尝试运行函数时出现此错误:

致命错误:在 C:\xampp\htdocs\blogfive\core\functions\functions.php:87 中带有消息“SQLSTATE[HY093]:无效参数编号:未定义参数”的未捕获异常“PDOException”: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): require_once('C:\xampp\htdocs...') # 3 {main} 在第 87 行的 C:\xampp\htdocs\blogfive\core\functions\functions.php 中抛出

【问题讨论】:

  • 为什么需要嵌套函数?运行循环并使用结果设置一个字符串同样容易。

标签: php pdo


【解决方案1】:

$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); 
 }

【讨论】:

  • @Akam 我们也可以在 INSERT 中使用 SET。 apokryfos anwsers 是正确的
猜你喜欢
  • 2012-05-08
  • 1970-01-01
  • 2011-08-08
  • 2015-09-29
  • 2014-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-15
相关资源
最近更新 更多