errno == 1146) { self::tryToCreateTables(); } } return false; } public static function setBulkCache($cacheArray, $metadata, $batchSize = 50) { if (empty($cacheArray)) { return false; } $start = microtime(true); foreach ($cacheArray as $name => $cache) { self::_setCache($name, $cache, $metadata['domain'], $metadata['ishttps'], $metadata['user_location'], $metadata['loggedType']); } $end = number_format(microtime(true) - $start, 5); //_error_log("Memory setBulkCache took {$end} seconds"); return true; } public static function _setCache($name, $content, $domain, $ishttps, $user_location, $loggedType) { if (!is_string($content)) { $content = _json_encode($content); } if (empty($content)){ return false; } global $global; $time = time(); $timezone = date_default_timezone_get();; // Preparing SQL for Metadata Insertion $metadataSql = "INSERT INTO " . self::$metadataTable . " (name, domain, ishttps, user_location, loggedType, created, modified, expires, timezone, created_php_time) VALUES (?, ?, ?, ?, ?, NOW(), NOW(), ?, ?, ?) ON DUPLICATE KEY UPDATE expires = VALUES(expires), created_php_time = VALUES(created_php_time), modified = NOW()"; $contentSqlBase = "INSERT INTO " . self::$contentTable . " (id, content) VALUES (?, ?) ON DUPLICATE KEY UPDATE content = VALUES(content)"; $name = self::hashName($name); $expires = date('Y-m-d H:i:s', strtotime('+1 month')); $metadataSqlValues = [$name, $domain, $ishttps, $user_location, $loggedType, $expires, $timezone, $time]; /** * * @var array $global * @var object $global['mysqli'] */ // Insert metadata $metadataResult = sqlDAL::writeSql($metadataSql, 'sssssssi', $metadataSqlValues); if ($metadataResult) { $insertedId = @$global['mysqli']->insert_id; // Get the last inserted ID // Insert content if ($insertedId > 0) { return sqlDAL::writeSql($contentSqlBase, 'is', [$insertedId, $content]); } else { return false; } } else { return false; } } public static function _deleteCache($name) { global $global; if (empty($name)) { return false; } if (!static::isTableInstalled(self::$metadataTable)) { return false; } $name = self::hashName($name); // Delete from content table $sqlContent = "DELETE FROM " . self::$contentTable . " WHERE id IN (SELECT id FROM " . self::$metadataTable . " WHERE name = ?)"; sqlDAL::writeSql($sqlContent, "s", [$name]); // Delete from metadata table $sqlMetadata = "DELETE FROM " . self::$metadataTable . " WHERE name = ?"; return sqlDAL::writeSql($sqlMetadata, "s", [$name]); } public static function _deleteCacheStartingWith($name) { global $global; if (empty($name)) { return false; } if (!static::isTableInstalled(self::$metadataTable)) { return false; } $name = self::hashName($name); // Delete from content table $sqlContent = "DELETE FROM " . self::$contentTable . " WHERE id IN (SELECT id FROM " . self::$metadataTable . " WHERE name LIKE '{$name}%')"; sqlDAL::writeSql($sqlContent); // Delete from metadata table $sqlMetadata = "DELETE FROM " . self::$metadataTable . " WHERE name LIKE '{$name}%'"; return sqlDAL::writeSql($sqlMetadata); } public static function _deleteCacheWith($name) { global $global; if (empty($name)) { return false; } if (!static::isTableInstalled(self::$metadataTable)) { return false; } $name = self::hashName($name); // Delete from content table $sqlContent = "DELETE FROM " . self::$contentTable . " WHERE id IN (SELECT id FROM " . self::$metadataTable . " WHERE name LIKE '%{$name}%')"; sqlDAL::writeSql($sqlContent); // Delete from metadata table $sqlMetadata = "DELETE FROM " . self::$metadataTable . " WHERE name LIKE '%{$name}%'"; return sqlDAL::writeSql($sqlMetadata); } public static function _deleteAllCache() { global $global; if (!static::isTableInstalled(self::$metadataTable)) { return false; } // Truncate content table $sqlContent = "TRUNCATE TABLE " . self::$contentTable . ""; sqlDAL::writeSql($sqlContent); // Truncate metadata table $sqlMetadata = "TRUNCATE TABLE " . self::$metadataTable . ""; return sqlDAL::writeSql($sqlMetadata); } }