如何基于数组键更新表作为列名? PDO

时间:2016-01-20 21:07:32

标签: php mysql arrays pdo

这与基于键的插入

不同

我想知道如何使用数组的array_keys作为更新查询的列名。对象是我有一个表单,其中包含用户可以更新的所有数据,如性别,国家,国籍等。但是说用户只想更新他们的国家,因此array_filter过滤所有NULL / Empty值的数组。然后我希望键作为列的名称更新;但是,我想知道如何将它们绑在一起。

也许是这样他们一起去了:

"UPDATE Users SET" . $Columns . "WHERE ID = 5";

我希望列格式。 “国家=美国,性别=男性”等。

我目前的代码:

<?php
class Update {    
    private $UpdateColumn;
    private $UpdatedData;
    private $ID;

    protected $Connect;
    protected $Data;

    public function __construct($UpdateColumn, $ID) {
        try {
            $this->Connect = new pdo(****); //Hidden for privacy test server
            $this->Connect->setAttribute(
                PDO::ATTR_ERRMODE,
                PDO::ERRMODE_EXCEPTION
            );   
        } catch(PDOException $ex) {
            die(json_encode([
                'outcome' => false,
                'message' => 'Unable to connect'
            ]));
        }

        $this->UpdateColumn = $UpdateColumn;
        $this->ID = $ID;
    }

    public function bindData() {
        $this->Data = [
            $this->UpdateColumn,
            $this->ID
        ];

        return $this->Data;
    }

    public function checkForErrors(){

        foreach($this->Data as $Data){
            $Error = false;

            if(empty($Data)){
                $Error = true;
            }

            if(isNum($Data[1])){
                $Error = true;
            }
        }

        return $Error;    
    }

    public function Update() {
        $Query = $this->Connect->prepare(
            "UPDATE Users SET". $this->Data[0] . "WHERE ID = :ID"
        );
        $Query->bindValue(":ID", $this->Data[1]);
        $Query->execute();
    }

    public function Redirect(){
        return header("Location: /Profile?ID=$this->Data[1]");
    }
}

使用代码。

<?php
session_start();

require_once("Scripts/PHP/Class/Update.class.php");

$DataUpdate = array_filter($_POST);
$Columns = array_keys($DataUpdate);

$ColumnsToUpdate = implode($Columns, ", ");
//I want to have ColumnsToUpdate look like: Gender = Male, Age = 67, format
//$Update = new Update($ColumnsToUpdate, $DataUpdate, $_SESSION['ID']);

?>

在我的情况下,我需要一个数组分隔符,我可以用它来查看每个array_key及其对应的数据

$Array = array(
    "Age" => 9,
    "Gender" => "Boy",
    "Country" => "",
);

$Array = array_filter($Array);
$Columns = array_keys($Array);

$ColumnToSend = "";

foreach($Array as $Arr => $Key){
    $ColumnToSend .= $Arr ."=". $Key . ",";
}

echo($ColumnToSend);

那会产生所需的格式,但是如果将它放入查询中它会起作用吗?

0 个答案:

没有答案