一尘不染

PHP生成动态PDO插入

mysql

以下代码应将数组中的每个键值对插入到表中的数学列值中。该脚本不返回错误,但插入的行仅包含数组中的最后一个值

例如

array('one'=>1,'two'=>2,'three'=>3);

将行成功插入到具有第一,第二和第三列的表中,但总共插入值3。

    $columns = array();
    $bind = '';
    foreach($array as $key => $value){

        $columns[] = $key;

    }

    $columnString = implode($columns,',');
    $valueString = implode($columns,',:');
    $valueString = ':' . $valueString;

    $core = core::getInstance();
    $STH = $core->dbh->prepare("INSERT INTO table (" . $columnString . ") VALUES 
    (" . $valueString . ")");

    foreach($array as $key => $value){

        $STH->bindParam(':' . $key,$value);
    }

阅读 314

收藏
2020-05-17

共1个答案

一尘不染

忘记了bindParam,只需使用execute并传递以下值$array

$STH->execute($array);

另外,您可以完全擦除命名参数,以简化代码:

$columnString = implode(',', array_keys($array));
$valueString = implode(',', array_fill(0, count($array), '?'));

$STH = $core->dbh->prepare("INSERT INTO table ({$columnString}) VALUES ({$valueString})");
$STH->execute(array_values($array));
2020-05-17