PHP generate dynamic PDO insert

后端 未结 4 1717
半阙折子戏
半阙折子戏 2020-12-06 19:44

The following code should insert each key-value pair in an array into a mathing column-value in a table. The script returns no errors but the the inserted row contains only

相关标签:
4条回答
  • 2020-12-06 20:28
    $conn = new PDO('mysql:host=' . $HOST . ';dbname=' . $DATABASE, $USERNAME, $PASSWORD);
    $conn->exec("set names utf8");
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
    
    $ins_query = 'INSERT INTO `' . $table_name . '` ';
    
    $columns = array();
    $columns_bindings = array();
    foreach ($dataArray as $column_name => $data) {
        $columns[] = $column_name;
        $columns_bindings[] = ':' . $column_name;
    }
    
    $ins_query = $ins_query . '(' . implode(', ', $columns) . ') VALUES (' . implode(', ', $columns_bindings) . ')';
    
    $stmt = $conn->prepare($ins_query);
    
    foreach ($dataArray as $column_name => $data) {
        $stmt->bindValue(":" . $column_name, $data);
    }
    if (!$stmt->execute()) {
        print_r($stmt->errorInfo());
    
    } else {
        echo "Insertd";
    }
    
    0 讨论(0)
  • 2020-12-06 20:29
    foreach($array as $key => $value){
        $STH->bindParam(':' . $key,$array[$key]);
    }
    

    Try that

    0 讨论(0)
  • 2020-12-06 20:44

    maybe something like this:

    $columns = array('one'=>1,'two'=>2,'three'=>3);
    
    $columnString = implode(',', array_flip($columns));
    $valueString = ":".implode(',:', array_flip($columns));
    
    $core = core::getInstance();
    $STH = $core->dbh->prepare("INSERT INTO table (" . $columnString . ") VALUES (" . $valueString . ")");
    
    foreach($columns as $key => $value){
        $STH->bindValue(':' . $key, $value);
    }
    
    0 讨论(0)
  • 2020-12-06 20:47

    Forget about bindParam, just use execute and pass it the values of $array:

    $STH->execute($array);
    

    Alternatively, you could scratch the named parameters altogether to simplify your code a little:

    $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));
    
    0 讨论(0)
提交回复
热议问题