【问题标题】:Creating Array for PDO Execute Statement为 PDO 执行语句创建数组
【发布时间】:2014-07-31 23:17:56
【问题描述】:

我正在尝试为 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]等?

【问题讨论】:

    标签: php mysql pdo


    【解决方案1】:

    你似乎把事情复杂化了。您已经有一个参数名称与值的关联数组,因此您可以简单地使用它

    $stmt->execute($values);
    

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

    【讨论】:

    • 我要说的是,你应该把它作为答案发布 - 我在你收集的时候过于复杂了,我最终只使用了 $stmt->execute($_POST);很高兴去。谢谢!
    • @Lauren 请小心使用$_POST,因为您无法控制其中的内容。
    • 我正在从 AJAX 序列化数组中提取它...这会撤消 PDO 提供的安全措施吗?
    • @Lauren 没有,但是任何意外的 POST 参数都会导致 PDO 触发错误/异常
    • 好的,很好。谢谢!
    【解决方案2】:

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

    你的意思是:

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

    【讨论】:

      猜你喜欢
      • 2016-04-18
      • 1970-01-01
      • 2016-09-29
      • 1970-01-01
      • 1970-01-01
      • 2012-12-16
      • 1970-01-01
      • 2019-09-16
      • 1970-01-01
      相关资源
      最近更新 更多