我试图创建一个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), "");
我似乎无法弄清楚为什么会这样。
答案 0 :(得分:1)
我需要使用bindvalue而不是bindparam来锁定$ value变量的值而不是引用它,因为$ value变量会在每次循环迭代时更改值。
答案 1 :(得分:0)
我测试了它的确有效:
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);
试试吧!