112 lines
3.5 KiB
PHP
Executable File
112 lines
3.5 KiB
PHP
Executable File
<?php
|
|
// afficherMsg==1 affiche le succes; afficherMsg==1 ou 2 affiche si erreur
|
|
function dynRequete_insert($tableName, $fields = [], $ficAppelant = '', $afficherMsg = 0, $localDebug = 0) {
|
|
|
|
global $admMsg, $admMsgClass, $idPdo, $debugMsg, $debug; // Variables globales
|
|
|
|
$startTime = microtime(true); // Mesure du temps d'exécution
|
|
$reqInsert = '';
|
|
|
|
// Debug sur la fonction
|
|
if ($localDebug == 2 && (isset($debug[1]) && $debug[1] == '1' || isset($debug[2]) && $debug[2] == '1')) {
|
|
$debugMsg .= monDebug(2, ['tableName' => $tableName, 'fields' => $fields], 'fonctionRequete_insert.php (generique)', $ficAppelant);
|
|
}
|
|
|
|
if (empty($fields) || !is_array($fields)) {
|
|
if ($afficherMsg != 0) {
|
|
$admMsg .= "Aucun champ fourni pour l'INSERT";
|
|
$admMsgClass = 'ko';
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// ----------------------------------------------------
|
|
// Construction de la requête INSERT
|
|
// ----------------------------------------------------
|
|
$cols = [];
|
|
$params = [];
|
|
$bindParams = [];
|
|
|
|
foreach ($fields as $col => $val) {
|
|
$cols[] = "`$col`"; // Colonnes simples avec backticks
|
|
$params[] = ":$col"; // Paramètres PDO
|
|
$bindParams[$col] = $val; // Valeurs à binder
|
|
}
|
|
|
|
$colsStr = implode(", ", $cols);
|
|
$paramsStr = implode(", ", $params);
|
|
|
|
|
|
if (!(substr($tableName, 0, 1) === '`' && substr($tableName, -1) === '`')) {
|
|
$tableName = "`" . str_replace("`", "", $tableName) . "`";
|
|
}
|
|
$reqInsert = "INSERT INTO $tableName ($colsStr) VALUES ($paramsStr);";
|
|
|
|
// Debug requête brute
|
|
if ($localDebug == 2 && (isset($debug[1]) && $debug[1] == '1' || isset($debug[2]) && $debug[2] == '1')) {
|
|
$debugMsg .= monDebug(2, ['requete Brute' => $reqInsert], $ficAppelant);
|
|
}
|
|
|
|
// Requête reconstruite
|
|
$requeteFinale = reconstruireRequeteInsert($reqInsert, $bindParams);
|
|
|
|
// Debug requête construite
|
|
if (($localDebug == 1 || $localDebug == 2) && (isset($debug[1]) && $debug[1] == '1' || isset($debug[2]) && $debug[2] == '1')) {
|
|
$debugMsg .= monDebug(2, ['Requête' => $requeteFinale], $ficAppelant);
|
|
}
|
|
|
|
// ----------------------------------------------------
|
|
// Exécution de la requête
|
|
// ----------------------------------------------------
|
|
try {
|
|
$stmt = $idPdo->prepare($reqInsert);
|
|
$stmt->execute($bindParams ?? []);
|
|
|
|
if ($afficherMsg == 1) {
|
|
$admMsg .= "Requête INSERT exécutée avec succès ";
|
|
$admMsgClass = 'ok';
|
|
}
|
|
|
|
} catch (PDOException $e) {
|
|
if ($afficherMsg != 0) {
|
|
$admMsg .= "Erreur lors de l'exécution de la requête INSERT";
|
|
}
|
|
|
|
if (($localDebug == 1 || $localDebug == 2) && (isset($debug[1]) && $debug[1] == '1' || isset($debug[2]) && $debug[2] == '1')) {
|
|
if ($stmt) {
|
|
$erreur = $stmt->errorInfo();
|
|
} else {
|
|
$erreur = $idPdo->errorInfo();
|
|
}
|
|
$debugMsg .= monDebug(2, [
|
|
'PDO message' => $e->getMessage(),
|
|
'SQLSTATE' => $erreur[0],
|
|
'Driver code' => $erreur[1],
|
|
'Erreur mysql' => $erreur[2],
|
|
'SQL' => $reqInsert
|
|
], 'fonctionRequete_insert.php', $ficAppelant);
|
|
}
|
|
|
|
$admMsgClass = 'ko';
|
|
return false;
|
|
}
|
|
|
|
// Temps d'exécution
|
|
if ($localDebug == 1 && (isset($debug[1]) && $debug[1] == '1' || isset($debug[2]) && $debug[2] == '1')) {
|
|
$endTime = microtime(true);
|
|
$executionTime = $endTime - $startTime;
|
|
$debugMsg .= "\t|\tTemps d'exécution : " . number_format($executionTime, 5) . " secondes.";
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
function reconstruireRequeteInsert($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;
|
|
}
|
|
?>
|