【问题标题】:php pdo insert datas using functionphp pdo使用函数插入数据
【发布时间】:2023-03-11 01:36:01
【问题描述】:

我正在尝试使用 php & pdo 插入数据。我正在为插入函数编写以下代码,我将它们称为php_insert_data("admin", array( 'user_name', 'user_pwd', 'user_email', 'profile_created_on' ), array( 'Administrator', '123456', 'admin@gmail.com', 'date here' ));。我在下面的代码中尝试了这个。但它不会将数据插入到 db 表中。如何正确传递上述这些列名和列值?

function php_insert_data($table_name, array $field_name, array $field_values)   
    {
        global $dbh;
        foreach($field_name as $f_names)
        {
            $transform_array_fnames[] = $f_names;
        }
        foreach($field_values as $f_values)
        {
            $transform_array_fvalues[] = $f_values;
        }
        $comma_fnames = implode(',', $transform_array_fnames);
        $comma_fvalues = implode(',', $transform_array_fvalues);
        $insert_query = $dbh->prepare("INSERT INTO $table_name SET $comma_fnames = $comma_fvalues");
        $insert_query->bindValue(':comma_fvalues', $comma_fvalues);
        $insert_query->execute();
    }

【问题讨论】:

    标签: php mysql arrays function pdo


    【解决方案1】:

    您准备好的查询最终将如下所示:

    INSERT INTO admin SET user_name = Administrator
    

    您缺少 Administrator 周围的引号,这不是表中的有效列。因此,您将收到 SQL 错误。您可以通过开启错误报告来查看这一点。

    在查询中使用变量会使它们容易受到注入,因此通常要避免这种情况——即使变量来自受信任的位置。

    您错误地使用了bindValue。要使其正常工作,您需要在名为 :comma_fvalues 的查询中添加一个 single 字段。

    您可以将其重写为:

    $field_value_tokens = array_fill(0, count($f_values), "?");
    $field_value_tokens_commas = implode(",", $field_value_tokens);
    $insert_query = $dbh->prepare("INSERT INTO $table_name ($comma_fnames)
        VALUES ($field_value_tokens_commas)");
    $insert_query->execute($f_values);
    

    【讨论】:

      猜你喜欢
      • 2014-12-06
      • 1970-01-01
      • 2021-02-09
      • 2018-08-01
      • 2015-10-24
      • 1970-01-01
      • 1970-01-01
      • 2018-08-01
      • 1970-01-01
      相关资源
      最近更新 更多