[英]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.