PHP / PDO:Mysql插入函数

时间:2013-11-25 00:41:16

标签: php pdo

我试图创建一个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), "");

我似乎无法弄清楚为什么会这样。

2 个答案:

答案 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);

试试吧!