为PDO执行语句创建数组

时间:2014-07-31 23:17:56

标签: php mysql pdo

我正在尝试为PDO插入的执行部分动态创建一个数组。我的工作代码包括以下文本:

$stmt->execute(array(
  ':fname' => $_POST['fname'],
  ':lname' => $_POST['lname'],
  ':email' => $_POST['email']
));

我第一次尝试创建数组:

$insert_execute = array();
foreach ($values as $column => $value) {
  array_push($insert_execute, ":" . $column . " => " . "'".$value."'");
}

但是当我尝试执行时,我收到了PDO错误:

SQLSTATE[HY093]: Invalid parameter number: parameter was not defined

当我打印结果时,还有一个附加参数:

Array
(
  [0] => fname => 'Test Name'
  [1] => lname => 'Test Last'
  [2] => email => 'test@email.com'
)

如何修改array_push以删除数组中的[0],[1],[2]等?

2 个答案:

答案 0 :(得分:1)

您正在构建并推送字符串到该数组上。 =>不应该是您要插入的内容的一部分 - 它只是用于初始化。

你的意思是说:

foreach ($values as $column => $value) {
  $insert_execute[":$column"] = $value;
}

答案 1 :(得分:1)

你似乎过于复杂了。您已经有一个参数名称的关联数组值,因此您只需使用该

$stmt->execute($values);

数组中参数名称的冒号前缀(:)是可选的。如果它不存在,PDO扩展将自动添加它。