Dê uma olhada no código PHP:
$user->v_useragent = 'coresky.agent';
Esse código pode provocar uma consulta SQL UPDATE ou INSERT ou pode não provocar se dados idênticos já estiverem instalados no banco de dados, e é por isso que essa funcionalidade é chamada de consultas SQL fantasma. Uma funcionalidade semelhante geralmente está presente na maioria dos CRMs, mas vamos ver como ela pode ser implementada sem o CRM. As solicitações fantasmas têm o potencial de serem amplamente utilizadas em aplicativos da Web, especialmente em termos de configurações. Um algoritmo típico (mas não necessário) prossegue em três estágios: lendo dados do banco de dados, alterando dados, possivelmente várias vezes e gerando consultas SQL reais para atualizar os dados no banco de dados. Vamos descobrir os detalhes ...
No total, você deve ter três métodos, um para cada estágio. Vou dar o código do primeiro método que descompacta completamente os dados lidos do banco de dados, pois é bastante simples:
class SKY // coresky { ... static function &ghost($char, $original, $sql = '', $flag = 0) { SKY::$mem[$char] = [$flag, $flag & 4 ? null : $original, $sql, []]; if ($sql) trace('GHOST SQL: ' . (is_array($sql) ? end($sql) : $sql), false, 1); if ($original) foreach (explode("\n", unl($original)) as $v) { list($k, $v) = explode(' ', $v, 2); SKY::$mem[$char][3][$k] = unescape($v, true); } return SKY::$mem[$char][3]; }
Parâmetros de entrada do método:
- $ char - uma pequena letra do alfabeto inglês, indica o tipo de funcionalidade das consultas fantasmas, pode ser usada em prefixos variáveis, como no exemplo acima;
- $ original - o conteúdo textual da célula do banco de dados (`mediumtext` para MySQL), onde todas as variáveis das consultas fantasmas $ char são armazenadas em massa. Uma string vazia também pode ser inserida;
- $ sql - um modelo de consulta que será usado para gerar uma consulta SQL real, por exemplo, em uma função de retorno de chamada para register_shutdown_function ();
- $ flag - a bandeira. Mais frequentemente, um valor predefinido de 0 é usado;
Os modelos de consulta podem ser de dois tipos, com base nas funções sql (..) ou sqlf (..). Vou dar o segundo código completamente, pois, quando usado corretamente, garante a impossibilidade de injeção de SQL, é rápido e bastante simples:
function sqlf() {
Infelizmente, a função sqlf () não é universal em termos de compilação de
consultas SQL arbitrárias em termos de proteção contra injeção. No entanto, existe em paralelo com a função universal sql (), devido à velocidade de operação relativamente alta. Modelos para sqlf () são usados no caso de trabalhar com apenas uma célula de texto médio. O segundo modelo é usado quando você precisa organizar essas consultas pendentes para muitas colunas da tabela.
Como é o processamento do código PHP especificado no início do artigo
A variável $ user contém um ponteiro para um objeto USER, que por sua vez possui os métodos mágicos __get () e __set (). Pelo prefixo v_, a classe entende que está gravando na tabela de sessão `visitors` e chama o método SKY :: save (..), que salva o código no array SKY :: $ mem. No final do script, a função de retorno de chamada para register_shutdown_function () é chamada, na qual a consulta SQL real no banco de dados é realmente executada (ou não).
Portanto, os outros dois métodos necessários para organizar o funcional são SKY :: save (..) e SKY :: here (..). O primeiro armazena os dados em uma matriz e o segundo gera e executa uma consulta real no banco de dados.
O código coresky (estrutura reutilizável ou código CMF) usa 8 tipos de SQL fantasma:
- configuração do sistema, que é armazenada no banco de dados;
- Configuração do visitante
- configuração de usuários autorizados;
- configuração do sistema do painel de administração;
- configuração do sistema de lançamentos de console;
- três tipos de SQL fantasma são usados para organizar o utilitário i18n;
Como você pode ver, o "phantom SQL" é relevante para quase todos os aplicativos da web.
Vantagens da funcionalidade descrita
- não é necessário fazer ALTER TABLE ... (ou INSERIR novas linhas) para adicionar novas variáveis de configuração à medida que o aplicativo se desenvolve. Você pode adicionar novas variáveis simplesmente no código PHP sem alterar a estrutura do banco de dados;
- a funcionalidade pode reduzir o número de consultas ao banco de dados para uma, no caso em que há um registro na mesma linha da mesma tabela;
Desvantagem
Para variáveis SQL fantasmas, você não pode "estragar" os índices; provavelmente, você não pode criar LOCK TABLE ou usar outros recursos avançados do MySQL.
Mais informações podem ser encontradas no
site do projeto SKY.