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