Echa un vistazo al c贸digo PHP:
$user->v_useragent = 'coresky.agent';
Dicho c贸digo puede provocar una consulta SQL ACTUALIZAR o INSERTAR, o puede no provocar si ya hay datos id茅nticos instalados en la base de datos, por lo que esta funcionalidad se denomina consultas SQL fantasmas. Una funcionalidad similar suele estar presente en la mayor铆a de los CRM, pero veamos c贸mo se puede implementar sin CRM. Las solicitudes fantasmas tienen el potencial de ser ampliamente utilizadas en aplicaciones web, especialmente en t茅rminos de configuraciones. Un algoritmo t铆pico (pero no necesario) procede en tres etapas: lectura de datos de la base de datos, cambio de datos, posiblemente varias veces, y generaci贸n de consultas SQL reales para actualizar los datos en la base de datos. Vamos a descubrir los detalles ...
En total, debe tener tres m茅todos, uno para cada etapa. Le dar茅 el c贸digo del primer m茅todo que desempaqueta completamente los datos le铆dos de la base de datos, ya que es bastante simple:
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 del m茅todo:
- $ char: una letra min煤scula del alfabeto ingl茅s, indica el tipo de funcionalidad de las consultas fantasmas, se puede usar en prefijos variables, como en el ejemplo anterior;
- $ original: el contenido textual de la celda de la base de datos (`mediumtext` para MySQL), donde todas las variables de las consultas fantasmas $ char se almacenan a granel. Tambi茅n se puede ingresar una cadena vac铆a;
- $ sql: una plantilla de consulta que se utilizar谩 para generar una consulta SQL real, por ejemplo, en una funci贸n de devoluci贸n de llamada para register_shutdown_function ();
- $ flag - la bandera. M谩s a menudo, se usa el valor predeterminado 0;
Las plantillas de consulta pueden ser de dos tipos, seg煤n las funciones sql (..) o sqlf (..). Dar茅 el segundo c贸digo por completo, ya que, cuando se usa correctamente, garantiza la imposibilidad de la inyecci贸n de SQL, es r谩pido y bastante simple:
function sqlf() {
Desafortunadamente, la funci贸n sqlf () no es universal en t茅rminos de compilaci贸n de
consultas SQL arbitrarias en t茅rminos de protecci贸n contra la inyecci贸n. Sin embargo, existe en paralelo con la funci贸n universal sql (), debido a la relativamente alta velocidad de operaci贸n. Las plantillas para sqlf () se usan para el caso de trabajar con una sola celda de texto medio. La segunda plantilla se usa cuando necesita organizar tales consultas pendientes para muchas columnas de la tabla.
驴C贸mo es el procesamiento del c贸digo PHP especificado al comienzo del art铆culo?
La variable $ user contiene un puntero a un objeto USER, que a su vez tiene los m茅todos m谩gicos __get () y __set (). Por el prefijo v_, la clase entiende que est谩 escribiendo en la tabla de sesi贸n `visitantes` y llama al m茅todo SKY :: save (..), que guarda el c贸digo en la matriz SKY :: $ mem. Al final del script, se llama a la funci贸n de devoluci贸n de llamada para register_shutdown_function (), en la que la consulta SQL real en la base de datos se realiza (o no).
Entonces, los otros dos m茅todos que son necesarios para organizar lo funcional son SKY :: save (..) y SKY :: here (..). El primero almacena los datos en una matriz, y el segundo genera y realiza una consulta real en la base de datos.
El c贸digo coresky (marco reutilizable o c贸digo CMF) utiliza 8 tipos de SQL fantasma:
- configuraci贸n del sistema, que se almacena en la base de datos;
- Configuraci贸n de visitante
- configuraci贸n de usuarios autorizados;
- configuraci贸n del sistema del panel de administraci贸n;
- configuraci贸n del sistema de lanzamientos de consolas;
- Se utilizan tres tipos de SQL fantasma para organizar la utilidad i18n;
Como puede ver, el "SQL fantasma" es relevante para casi todas las aplicaciones web.
Ventajas de la funcionalidad descrita
- no es necesario hacer ALTER TABLE ... (o INSERTAR nuevas filas) para agregar nuevas variables de configuraci贸n a medida que se desarrolla la aplicaci贸n. Puede agregar nuevas variables simplemente en c贸digo PHP sin cambiar la estructura de la base de datos;
- la funcionalidad puede reducir el n煤mero de consultas de la base de datos a una, en el caso de que haya un registro en la misma fila de la misma tabla;
Desventaja
Para las variables SQL fantasmas, no puede "atornillar" 铆ndices; lo m谩s probable es que no pueda hacer LOCK TABLE o usar otras caracter铆sticas avanzadas de MySQL.
Se puede encontrar m谩s informaci贸n en
el sitio web del proyecto SKY.