php pdo使用函数插入数据

时间:2014-08-24 13:49:50

标签: php mysql arrays function pdo

我正在尝试使用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();
    }

1 个答案:

答案 0 :(得分:1)

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

INSERT INTO admin SET user_name = Administrator

您缺少Administrator周围的引号,该引号不是表中的有效列。因此,您将收到SQL错误。您可以通过打开和关闭错误报告来查看此内容。

在查询中使用变量会使它们容易受到注入攻击,因此通常需要避免 - 即使变量来自受信任的位置。

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

您可以将其重写为:

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