/
delphin
/
CatRW
Обзор
Документация
Войти
/
delphin
/
CatRW
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
api/database.php
176 строк
6 KB
delphin
перед глобальным изменением
04 мар 2026, 09:56
Верифицирован
04 мар 2026, 09:56
c6cfdf3
Код
Авторство
О чём код?
<?php // /api/Database.php - УПРОЩЕННАЯ И РАБОЧАЯ ВЕРСИЯ class Database { private static $pdo = null; public static function connect() { if (self::$pdo === null) { $dsn = "mysql:host=" . DB_HOST . ";dbname=" . DB_NAME . ";charset=" . DB_CHARSET; self::$pdo = new PDO($dsn, DB_USER, DB_PASS, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false ]); } return self::$pdo; } // === ПРОСТЫЕ МЕТОДЫ БЕЗ АВТОМАТИЧЕСКОЙ ОБРАБОТКИ === // Для простых SELECT запросов public static function select($sql, $params = []) { // Применяем фильтр масштаба $filteredSql = applyScaleFilter($sql); // Логируем оба запроса для сравнения error_log("=== Database::select() ==="); error_log("Original SQL: " . $sql); error_log("Filtered SQL: " . $filteredSql); error_log("Params: " . print_r($params, true)); try { $stmt = self::connect()->prepare($filteredSql); $stmt->execute($params); return $stmt->fetchAll(); } catch (Exception $e) { error_log("❌ SQL Error: " . $e->getMessage()); error_log("Failed SQL: " . $filteredSql); throw $e; } } public static function selectOne($sql, $params = []) { // Применяем фильтр масштаба $filteredSql = applyScaleFilter($sql); error_log("=== Database::selectOne() ==="); error_log("Original SQL: " . $sql); error_log("Filtered SQL: " . $filteredSql); try { $stmt = self::connect()->prepare($filteredSql); $stmt->execute($params); return $stmt->fetch(); } catch (Exception $e) { error_log("❌ SQL Error: " . $e->getMessage()); error_log("Failed SQL: " . $filteredSql); throw $e; } } /* public static function select($sql, $params = []) { // Применяем фильтр масштаба $sql = applyScaleFilter($sql); $stmt = self::connect()->prepare($sql); $stmt->execute($params); return $stmt->fetchAll(); } public static function selectOne($sql, $params = []) { // Применяем фильтр масштаба $sql = applyScaleFilter($sql); error_log("=== Database::selectOne() with scale filter ==="); error_log("Filtered SQL: " . $sql); try { $stmt = self::connect()->prepare($sql); $stmt->execute($params); return $stmt->fetch(); } catch (Exception $e) { error_log("Database::selectOne ERROR: " . $e->getMessage()); throw $e; } } */ /* public static function selectOne($sql, $params = []) { $stmt = self::connect()->prepare($sql); $stmt->execute($params); return $stmt->fetch(); } */ // INSERT - простая версия public static function insert($table, $data) { $keys = array_keys($data); $fields = implode(', ', $keys); $placeholders = ':' . implode(', :', $keys); $sql = "INSERT INTO $table ($fields) VALUES ($placeholders)"; error_log("INSERT SQL: " . $sql); error_log("INSERT DATA: " . print_r($data, true)); $stmt = self::connect()->prepare($sql); $stmt->execute($data); return self::connect()->lastInsertId(); } // UPDATE - безопасная версия с уникальными именами параметров public static function update($table, $data, $where, $whereParams = []) { // Генерируем SET части с уникальными именами $setParts = []; $params = []; $i = 0; foreach ($data as $key => $value) { $paramName = 'set_' . $key . '_' . $i; $setParts[] = "$key = :$paramName"; $params[":$paramName"] = $value; $i++; } // Добавляем WHERE параметры foreach ($whereParams as $key => $value) { // Убедимся, что ключ начинается с ':' $paramName = (strpos($key, ':') === 0) ? $key : ':' . $key; // Делаем уникальное имя если конфликт $originalParamName = $paramName; $j = 1; while (isset($params[$paramName])) { $paramName = $originalParamName . '_' . $j; $j++; } $params[$paramName] = $value; // Обновляем WHERE условие $where = str_replace($originalParamName, $paramName, $where); } $sql = "UPDATE $table SET " . implode(', ', $setParts) . " WHERE $where"; error_log("UPDATE SQL: " . $sql); error_log("UPDATE PARAMS: " . print_r($params, true)); $stmt = self::connect()->prepare($sql); $stmt->execute($params); return $stmt->rowCount(); } // DELETE public static function delete($table, $where, $params = []) { $sql = "DELETE FROM $table WHERE $where"; error_log("DELETE SQL: " . $sql); error_log("DELETE PARAMS: " . print_r($params, true)); $stmt = self::connect()->prepare($sql); $stmt->execute($params); return $stmt->rowCount(); } // Общий запрос public static function query($sql, $params = []) { $stmt = self::connect()->prepare($sql); $stmt->execute($params); return $stmt; } } ?>