簡體   English   中英

PHP / PDO:Mysql插入功能

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

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