alpha_full/admin/adminInclude/_fonctions/fonctionRequete_pourTableaux.php
2026-04-06 22:58:51 +02:00

122 lines
3.9 KiB
PHP
Executable File

<?php
function dynRequete_tableaux( $tableName, $fields = [], $conditions = [], $fieldNamesToGlobal = [], $orderBy ='', $ficAppelant = '', $afficherMsg = 0, $localDebug = 0) {
// fieldNamesToGlobal => tableau associatif avec champsDelaDB => variablePHP de recup
global $admMsg, $admMsgClass, $idPdo, $debugMsg; // Déclaration unique des variables globales
$startTime = microtime(true); // Pour mesurer le temps d'exécution
$reqSelect = '';
$result = null;
if (!empty($fieldNamesToGlobal)) {
foreach ($fieldNamesToGlobal as $fieldName => $globalVarName) {
global $$globalVarName; // Déclare chaque variable en global
}
}
// Gestion des backticks sauf si le champ est *
$escapedFields = array_map(function($field) { return ($field === '*') ? '*' : "`$field`"; }, $fields);
$fieldsStr = implode(", ", $escapedFields);
$reqSelect = "SELECT " .$fieldsStr. " FROM `" .$tableName."`";
// Ajout des conditions WHERE si elles existent
$bindParams = [];
if (!empty($conditions) && is_array($conditions)) {
$whereClauses = [];
foreach ($conditions as $key => $value) {
$whereClauses[] = "`$key` = :$key";
$bindParams[$key] = $value;
}
$reqSelect .= " WHERE " . implode(' AND ', $whereClauses);
}
$reqSelect .= ";"; // Fin de la requête
// Debug affichage de la requete construite
if ($localDebug == '1') {
$requeteFinale = reconstruireRequete_tableau($reqSelect, $bindParams);
$debugMsg .= monDebug (2, ['REQUÊTE RECONSTRUITE' => $requeteFinale ], $ficAppelant );
}
// Exécution de la requête
try {
$stmt = $idPdo->prepare($reqSelect);
// Execution
$stmt->execute($bindParams ?? []);
// Si on récupère plusieurs lignes (SELECT avec plusieurs résultats)
if ($stmt) {
$results = [];
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$results[] = $row; // Ajouter chaque ligne au tableau de résultats
}
// Vérifier si des résultats ont été récupérés
if (count($results) > 0) {
// Récupérer dynamiquement les noms des champs dans le résultat
$row = $results[0];
foreach ($fieldNamesToGlobal as $fieldName => $globalVarName) {
// Vérifier si le champ existe dans les résultats
if (array_key_exists($fieldName, $row)) {
// Crée une variable dynamique avec le nom spécifié dans le tableau associatif
$$globalVarName[] = $row[$fieldName] ?? null;
if ($localDebug == '1') {
$debugMsg .= "<pre>" . print_r($$globalVarName, true) . '</pre>';
}
} else {
$debugMsg .= "Le champ ".$fieldName." n'existe pas dans les résultats.";
$admMsgClass = 'ko';
return 2;
}
}
if ($afficherMsg == 1) {
$admMsg .= "La requête SELECT a été exécutée avec succès.";
$admMsgClass = 'ok';
}
} else {
$result = null; // Pas de résultats
if ($afficherMsg == 1) {
$admMsg .= "Aucune donnée trouvée. ";
$admMsgClass = 'ko';
}
}
}
}
catch (PDOException $e) {
if ($afficherMsg == 1) { $admMsg .= "Erreur lors de l'exécution de la requête"; }
if ($localDebug == '1') {
$erreur = $idPdo->errorInfo();
$debugMsg .= monDebug(2,['PDO message' => $e->getMessage(), 'SQLSTATE' => $erreur[0], 'Driver code' => $erreur[1], 'Erreur mysql' => $erreur[2] ],'');
}
$admMsgClass='ko';
return 2; // Retourner échec
// Temps d'exécution (si nécessaire)
if ($localDebug == '1') {
$endTime = microtime(true);
$executionTime = $endTime - $startTime;
$admMsg .= " | Temps d'exécution : " . number_format($executionTime, 5) . " secondes.";
}
}
return $result; // Retourner le résultat
}
function reconstruireRequete_tableau($sql, $params) {
foreach ($params as $key => $val) {
$escaped = is_numeric($val) ? $val : "'" . addslashes($val) . "'";
$sql = str_replace(":$key", $escaped, $sql); // Remplace les `:param`
}
return $sql;
}
?>