这与基于键的插入
不同我想知道如何使用数组的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);
那会产生所需的格式,但是如果将它放入查询中它会起作用吗?