簡體   English   中英

基於數組鍵作為列名的PDO插入

[英]PDO insert based on array keys as column names

我有一個PDO插入語句,該語句從表單提交中更新數據庫表。 有很多領域。 我特意使用了與html輸入名稱相同的列名稱。 有沒有更干凈的方式布置此代碼? 目前,我有30多個$_POST變量,並且希望通過某種形式的循環使用更簡潔的解決方案。

這是我當前的實現,例如,僅包括了幾個字段。

$stmt = $dbh->prepare("INSERT INTO myTable SET Col1 = ?, ColABC = ?, Col123 = ?, ColFoo = ?, ColDEF = ?");
$stmt->execute(
    array($_POST['Col1'], $_POST['ColABC'], $_POST['Col123'], $_POST['ColFoo'], $_POST['ColDEF'])
);

嘗試以下操作

$postarr = array('Col1', 'ColABC', 'Col123', 'ColFoo', 'ColDEF'); //<---- defined all the form elements you like to get from post
$sql = ''; $param = array();
foreach($postarr as $k){
    $sql .= $k.'=:'.$k.','; // setting up placeholders for columns we are goign to update or get value from $_POST data
    $param[$k] = $_POST[$k]; // setting up param array argument for execute() function
}
$sql = substr($sql,0,-1); // <--- remove last ,
$stmt = $dbh->prepare("INSERT INTO myTable SET " . $sql);
$stmt->execute($param);

以下內容未經測試,但您可以嘗試執行以下操作。

<form id='sqlpost' method='post' action='/test/target.php'>
    <h1>SQL Post</h1>       
    <input type='text' name='user' value='fred'/>
    <input type='text' name='name' value='frederick'/>
    <input type='text' name='email' value='fred@bedrock.com'/>

    <input type='text' name='age' value='21'/>
    <input type='text' name='sex' value='male'/>

    <input type="submit" name="subform" value="Submit"/>
</form>


/*
target.php
----------
*/

if( $_SERVER['REQUEST_METHOD']=='POST' ){

    $known=array('user','email','name');
    $postdata=array();


    foreach( $_POST as $field => $value ){
        if( in_array( $field, $known ) ) $postdata[ $field ]=$value;
    }

    $keys=array_keys( $postdata );
    $values=array_values( $postdata );              

    $sql='insert into myTable (`'.implode('`,`',$keys).'`) values (:'.implode(':',$keys).')';
    echo $sql;
}

將所有值放入數組$ input。 並按如下方式使用list()。

$InputArray['cal1'] =  $_POST['cal1'];
$InputArray['collabc'] =  $_POST['collabc'];
$InputArray['col123'] =  $_POST['col123'];
$InputArray['clofoo'] =  $_POST['clofoo'];
$InputArray['coldef'] =  $_POST['coldef'];

if (count($inputArray) > 0) {
        while (list($key, $val) = each($inputArray)) {
            if(!empty($val)){
                $fields.= $key . ',';
                $valset.= "'". $val ."',";
            }
        }
    }   

    $fields = trim($fields, ',');
    $valset = trim($valset, ',');
    $sql = "INSERT INTO $tableName ($fields) VALUES ($valset)";

    $stmt = $this->dbCon->prepare($sql);
    $stmt->execute($inputArray);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM