[英]PHP/PDO: Mysql insert function
我正在嘗試創建pdo mysql查詢功能。 如果此函數僅接受數組值,但該函數不止一個值,則該函數在bindParam()部分上切換值就可以正常工作。
public function db_qf($table, $fieldvalues, $where)
{//query function
$sql = "INSERT INTO " . $table . " (";
$parameters = "";
$counter = 0;
foreach ($fieldvalues as $key => $value)
{
$sql .= $key;
$parameters .= ":" . $key;
if (++$counter != count($fieldvalues)){$sql .= ", "; $parameters .= ", ";}
}
$sql .= ") VALUES (" . $parameters . ") " . $where;
$this->dbquery = $this->dbh->prepare($sql);
foreach ($fieldvalues as $key => $value)
{
$this->dbquery->bindParam(":" . $key, $value);
}
$this->dbquery->execute();
}
因此,如果我使用以下參數調用該函數,它將切換值,以便為金額插入日期,為日期插入金額。
$this->db_qf("bills", array("date" => "2013-11-24", "amount" => 30), "");
我似乎無法弄清楚為什么會這樣。
我需要使用bindvalue而不是bindparam來鎖定$ value變量的值,而不是對其進行引用,因為$ value變量在每次循環迭代時都會更改值。
我測試了並且可以正常工作:
public function insert($table,$columns_and_values) {
/*
* Columns Process
*/
$forms = [
"columns" => "",
"values" => ""
];
/*
* Array to execute() method
*/
$array_to_execute = [];
foreach($columns_and_values as $key => $val)
{
$forms["columns"] .= "$key,";
$forms["values"] .= ":{$key},";
$array_to_execute[":{$key}"] = $val;
}
$forms["columns"] = substr($forms["columns"],0,-1);
$forms["values"] = substr($forms["values"],0,-1);
//-----------------End of Columns Process
$query = sprintf("INSERT INTO $table(%s) VALUES(%s)",$forms['columns'],$forms['values']);
$stmt = $this->prepare($query);
$stmt->execute($array_to_execute);
}
通過調用方法:
<?php
class Database extends PDO {}
$db = new Database();
$cols = [
'email' => 'daison12006013@gmail.com',
'password' => '1234567890'
];
$db->insert("account",$cols);
試試吧!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.