Select Git revision
Objet.php 3.46 KiB
<?php
require_once "Objet.php";
/**
* Implémente les magic methods.
*/
class Objet
{
public function __construct($data = null)
{
if(!is_null($data)){
foreach ($data as $key => $value){
$this->$key = $value;
}
}
}
/**
* @param $name
* @return mixed
*/
public function __get($name)
{
return $this->$name ?? null;
}
/**
* @param $name
* @param $value
* @return void
*/
public function __set($name, $value)
{
$this->$name = $value;
}
/**
* Permet d'insérer un objet dans la base de données
* @param String $tableName
* @param array $columns
* @return array|string[]
*/
public static function addObject(String $tableName, array $columns) : array
{
$result["status"] = "success";
$result["message"] = "Insertion réussie";
// On va vérifier que $tableName est bien en format alphanumérique
if(!isAlphaNumeric($tableName)){
return [
"status" => "fail",
"message" => "Le format du nom de la table est incorrect."
];
}
// Maintenant on va vérifier que la table existe
try{
Database::pdo()->query("SELECT 1 FROM $tableName LIMIT 1");
} catch (PDOException $e) {
return [
"status" => "fail",
"message" => "La table $tableName ne semble pas exister.",
"pdoError" => $e
];
}
// Nous pouvons commencer l'insertion
// On va vérifier que l'index de chaque est bien en format alphanumérique
foreach($columns as $index => $value){
if(!isAlphaNumeric($index)){
return [
"status" => "fail",
"message" => "Le format " . htmlspecialchars($index) . " est incorrect."
];
}
}
// On prépare la requête
$queryString = ("INSERT INTO $tableName (" . implode(", ", array_keys($columns))
. ") VALUES (:" . implode(", :", array_keys($columns)) . ")");
$insertQuery = Database::pdo()->prepare($queryString);
try{
// Et on l'exécute
$insertQuery->execute($columns);
} catch (PDOException $e) {
return [
"status" => "fail",
"message" => "L'insertion de l'objet a échoué.",
"pdoError" => $e
];
}
return $result;
}
/**
* Permet de décrire une table représentant un objet.
* @param $tableName
* @return array
*/
public static function describeObject($tableName) : array
{
if(!isAlphaNumeric($tableName)){
return [
"status" => "fail",
"message" => "Le format du nom de la table est incorrect.",
"columns" => []
];
}else{
try{
$query = Database::pdo()->query("SHOW FULL COLUMNS FROM $tableName");
$columns = $query->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
return [
"status" => "fail",
"message" => $e->getMessage(),
"columns" => []
];
}
return [
"status" => "success",
"columns" => $columns
];
}
}
}