No lo he probado con otros motores de bases de datos, pero debe de ser muy parecido.
Hay que tener una tabla, con el siguiente modelo fisico
Key
|
Column name
|
Domain
|
Data type
|
Not null
|
Unique
|
Check
|
Default
|
flag
|
Char (1)
|
NO
|
NO
|
SQL para la creacion de la tabla.
Create Table "nombre_tabla" (
"flag" Char(1)
);
do
{
// nombre_tabla es una tabla para que cuando el estado este en 1 no continue este script
// hasta que el estado este en 0, y asi poder controlar la grabacion de todos los posibles
// usuarios que esten intentando grabar al mismo tiempo
$verificarsi = 10;
$controlar1 = "BEGIN WORK"; // (Se almacena en la variable la orden para inicio de transaccion)
$controlar2 = "LOCK TABLE nombre_tabla_bloquear IN EXCLUSIVE MODE"; //(Se almacena en la variable la orden para bloqueo de una tabla)
$consultarEstado = "SELECT flag FROM nombre_tabla_control WHERE flag = '0' or flag = 0";
$ejecutarConsultarEstado = ifx_query ($consultarEstado,$variable_administracion_conexion);
$salida = ifx_fetch_row ($ejecutarConsultarEstado);
$verificarsi = $salida['flag'];
if ($verificarsi == 0)
{
ifx_query ($controlar1,$variable_administracion_conexion);
//Ejecutar el inicio de la transaccion
ifx_query ($controlar2,$variable_administracion_conexion); / /Ejecutar bloqueo de la tabla
$cambiarEstadoflag = "UPDATE nombre_tabla_control SET flag = '1'"; // Actualizar el campo flag en "1"
ifx_query ($cambiarEstadoflag,$variable_administracion_conexion);
$CONSULTAR_datos = "SELECT * FROM nombre_tabla_control";
$EJECUTAR_CONSULTAR_datos = ifx_query ($CONSULTAR_datos,$variable_administracion_conexion);
while ($SALIDA = ifx_fetch_row ($EJECUTAR_CONSULTAR_datos))
{
if ($SALIDA['flag'] == "1" or $SALIDA['flag'] == 1) $controlarGrabacion = FALSE;
}
}
while ($controlarGrabacion); // --- (Aqui va el codigo que manipula la tabla bloqueda)
---
$verificacionotro = TRUE;
do // (No nesesariamente tiene que ser dentro de un bucle do)
{
$cambiarEstadoflag = "UPDATE nombre_tabla_control SET flag = '0'"; // (Actualizar el campo flag a 0 en la tabla de control)
ifx_query ($cambiarEstadoflag,$variable_administracion_conexion);
$verificacionotro = FALSE;
}while ($verificacionotro);
concurrencia, PHP programacion
No hay comentarios.:
Publicar un comentario