Usando MS Access en PHP. PHP y acceso remoto

Popularidad de DBMS acceso Microsoft(http://www.microsoft.com/office/access) se debe en parte a su interfaz gráfica fácil de usar. Además usando acceso como DBMS independiente, puedes usarlo GUI para organizar el trabajo con otras bases de datos, por ejemplo, MySQL o MicrosoftSQL Servidor.

Para demostrar la compatibilidad con ODBC en PHP, describiré el proceso de conexión a bases de datos. datos de microsoft Acceso en PHP. Esto es sorprendentemente fácil de hacer, pero gracias a la popularidad de Microsoft Access se volverá adición útil en tu arsenal creativo. Describiré este proceso paso a paso:

  1. crear una base Datos de acceso. Se supone que ya sabe cómo hacer esto, y si no sabe cómo, pero aún desea seguir la implementación de este ejemplo, utilice los servicios del programa asistente. Creé una base de datos estándar para almacenar información de contacto usando un asistente. Asegúrese de crear varios registros en la tabla y recuerde el nombre de la tabla, ¡lo necesitaremos pronto!
  2. Guarde la base de datos en su computadora.
  3. En el siguiente paso organizaremos el acceso a la base de datos. Medios de acceso ODBC. Ejecute el comando Inicio>Configuración>Panel de control (Inicio>Configuración> Panel de control). Busque el icono de fuentes de datos ODBC (32 bits) en el panel de control. Este icono inicia el Administrador ODBC, diseñado para configurar varios conductores y fuentes de datos en su sistema. Inicie el programa haciendo doble clic en este icono. La ventana Administrador se abre en la pestaña DSN de usuario de forma predeterminada. Esta pestaña enumera las fuentes de datos que se relacionan con usuario específico y sólo se puede utilizar en esta computadora. EN en este ejemplo Esta es la fuente de datos que se utilizará.
  4. Haga clic en el botón Agregar... en el lado derecho de la ventana. Se abre una nueva ventana para seleccionar un controlador diseñado para funcionar con la nueva fuente. Seleccionar cadena de microsoft Acceda al Controlador (*.mdb) y haga clic en Finalizar.
  5. Aparece una nueva ventana de Instalación en la pantalla. controladores ODBC para Microsoft Access (Configuración ODBC de Microsoft Access). Busque el cuadro de texto Nombre de la fuente de datos en el formulario e ingrese el nombre de la base de datos de Access que creó en él. Si lo desea, puede ingresar una descripción en el cuadro de texto ubicado directamente debajo del campo Nombre de la fuente de datos.
  6. Haga clic en el botón Seleccionar...; aparece una ventana con el estilo Explorador de Windows. Le pide que busque una base de datos a la que se accederá mediante ODBC.
  7. Busque su base de datos en el árbol de directorios y haga doble clic en ella. Volverá a la ventana Instalar el controlador ODBC para Microsoft Access. La ruta a la base de datos seleccionada se muestra encima del botón Seleccionar.... Haga clic en Aceptar.
  8. ¡Listo! Ahora puede trabajar con una base de datos de Access usando ODBC.

Todo lo que tienes que hacer es crear un script en el que trabajarás con la base de datos vía ODBC. En el siguiente escenario funciones generales ODBC (ver arriba) se utilizará para mostrar toda la información de la tabla de contactos creada con el asistente de Access. Sin embargo, antes de considerar el escenario, es útil saber cómo se ve la tabla Contactos en Access (Figura 11.3).

Arroz. 11.3. Tabla de contactos en MS Access

Ahora que sabe qué información se recuperará de la base de datos, podemos pasar al script. Si ha olvidado qué hace una función, consulte la descripción al principio de este capítulo. Los resultados del Listado 11.7 se muestran en la Figura. 11.4.

Listado 11.7. Uso de funciones ODBC para trabajar con MS Access

¿No es todo sencillo? Y lo mejor es que este script es totalmente compatible con cualquier otro DBMS que admita ODBC. Para practicar, intente repetir todos los pasos descritos para otro DBMS, ejecute el script y obtendrá los mismos resultados que se muestran en la Fig. 11.4.

También tengo un problema con una base de datos remota de Microsoft Access. Sólo mi base de datos se ha eliminado bastante. Está ubicado solo en la red local, en otra computadora.

La función PHP odbc_connect me da el siguiente error:
Advertencia: odbc_connect(): Error de SQL: [Controlador ODBC de Microsoft Access] No se puede iniciar la aplicación. Falta la base de datos del sistema o está abierta con acceso exclusivo de otro usuario.

Esto ocurre cuando en mi Windows, en mi computadora local, en el controlador ODBC, en las propiedades del “Fuente de Datos”, en la pestaña “DSN del Sistema”, indico que la “Base de Datos del Sistema” (archivo de grupo de trabajo - system.mdw) está ubicado en una unidad de red. Tan pronto como transfiero el mismo archivo al disco local de mi computadora (donde me siento), todo comienza a funcionar bien. No puedo entender qué pasa. ¡Dime por favor! Por alguna razón, el controlador ODBC obstinadamente no quiere ver el archivo de grupos de trabajo en una unidad de red compartida. Y si el archivo se encuentra localmente, entonces todo funciona a la perfección. ¿Qué puede estar mal? Por cierto, con la propia base pasa lo mismo. En general, para que odbc_connect funcione normalmente, resulta que tanto el “Archivo del grupo de trabajo” como la propia base de datos deben estar ubicados en la computadora local. Pero no puedo hacer eso. La base debe permanecer donde está. Y tengo que comunicarme con ella de forma remota a través de ODBC y publicar un poco de información de la base de datos en Internet en la página del sitio. No puedo entender por qué no funciona. En la configuración de ODBC, normalmente puede especificar todas las rutas a archivos de bases de datos remotas. Pero después de eso no funciona. En la computadora local todo funciona bien.

En su computadora local:
SO WinXP-SP2
Microsoft Access 97
PHP v5.2.3
ODBC v3.5
Servidor de aplicaciones v2.5.5

En una computadora remota, hay un servidor "dos milésimo".
Pensé que tal vez había algún problema con el acceso y la política de seguridad. Pero transfirí las bases de datos a una computadora normal, con el sistema operativo Win 98 y a un disco duro con FAT32. Allí tampoco ara. Ya estoy exhausto, no entiendo qué pasa. Da la impresión de que ODBS no puede funcionar en absoluto con bases de datos remotas. Pero esto no es así. Debería funcionar de todos modos. ¡Ayuda por favor!

-~{}~ 17.01.08 10:30:

¡Eso es todo, problema resuelto! ¡Hurra camaradas!

Aún así, encontré un texto sobre mi pregunta:
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=251&page=560
Ahí está el poste de abajo. Para aquellos que son demasiado vagos para profundizar allí, aquí está el copyright textual de esa publicación:
"Según tengo entendido, estamos trabajando en Windows. Presione Ctrl+Alt+Supr, seleccione el administrador de tareas y observe el proceso de Apache. Y vemos que se está ejecutando en nombre del SISTEMA, y no como el suyo. Entonces podemos No accede a los recursos de la red. Por lo tanto, podemos solucionar este problema iniciando el proceso con el nombre requerido".

Lancé Apache como usuario y todo empezó a funcionar a la perfección.

Es cierto que sólo quedaba una emboscada. La conexión ODBC a la base de datos debe escribirse manualmente en el código del programa de esta manera:
Odbc_Connect("DRIVER=(Microsoft Access Driver (*.mdb)); DBQ=//server/work/baza/mybaza.mdb; systemdb=//server/work/baza/system.mda", "nombre de usuario", " contraseña") o Die("No puedo conectarme a la base de datos");

Si hace lo mismo a través del "Administrador ODBC" de Windows, todavía no funcionará. El administrador crea sus propios caminos a través de los nombres de las unidades. Es decir, de esta manera:
"Z:\trabajo\baza"
pero necesito que la ruta sea una ruta de red, sin letra de unidad y con barras invertidas:
"//servidor/trabajo/baza/"

Aquí hay otro ejemplo que explica esta nueva emboscada.
Tenemos una unidad de red “Z:\work\baza” conectada a la computadora. Este es un análogo completo de la ruta de red "//server/work/baza/"
Escribimos el código de programa más simple en PHP para abrir un directorio remoto. Sin ningún ODBC. Para que puedas comprobar fácilmente si funciona o no:
OpenDir("Z:\trabajo\baza"); //da un mensaje de error
OpenDir("//servidor/trabajo/baza/"); //No hay error

Aquí está mi nueva pregunta. ¿Qué estoy haciendo mal? En cualquier caso, no será posible utilizar el “Administrador ODBC” de Windows para conectar recursos de red, ¿o todavía es posible de alguna manera? Repito, la emboscada ahora solo queda con la ortografía correcta de las rutas a los recursos de la red. ¿Quizás alguna configuración separada de la propia interfaz PHP sea responsable de este momento?

Si planea crear su propio sitio web dinámico en la plataforma Windows, lo más probable es que tenga que elegir un DBMS para almacenar información (aparentemente, no hay preguntas sobre el lenguaje en el que lo programará). Una de las opciones para solucionar este problema puede ser utilizar MS Access como servidor SQL. A continuación describiremos cómo acceder a una base de datos de MS Access en un script escrito en PHP.

Desafortunadamente, PHP no tiene herramientas integradas para trabajar con este DBMS, lo que, sin embargo, no los excluye de trabajar juntos: usaremos ODBC para conectarnos a la base de datos.

En primer lugar debemos crear la denominada Fuente DSN. Para ello (consideramos la opción cuando el usuario tiene instalado Windows 2000 Rus), en el panel de control debemos seleccionar Administración, y luego Fuentes de datos (ODBC). A continuación, en la ventana que aparece, seleccione la pestaña DSN del sistema, haga clic en el botón Agregar, seleccione el controlador de MS Access y haga clic en el botón Listo. En el campo de entrada del nombre de la fuente de datos, escriba el nombre por el cual luego podremos acceder a nuestra base de datos, por ejemplo, prueba, luego haga clic en el botón Seleccionar e indique dónde se encuentra nuestro archivo de base de datos en nuestro disco. Luego, si es necesario, podremos establecer un usuario y contraseña para acceder a la base de datos vía ODBC pulsando en el botón adicional. Ahora que tenemos una fuente de datos ODBC, podemos usar la función odbc_connect para conectarnos a nuestra base de datos:

$x=odbc_connect("prueba","prueba","prueba");
?>

Para pasar la solicitud al DBMS, podemos usar la función odbc_exec:

$res=odbc_exec($x,"crear prueba de tabla (f1 entero, f2 varchar(10))");
$res=odbc_exec($x,"insertar en valores de prueba (f1,f2)(1,"qwerty")");
$res=odbc_exec($x,"insertar en valores de prueba (f1,f2)(2,"asdfgh")");
?>

Si después de ejecutar este ejemplo abrimos la base de datos de prueba en MS Access, encontraremos que allí ha aparecido una nueva tabla test con los campos f1 y f2 de tipo entero y cadena, respectivamente; la tabla tendrá dos registros con los datos que se especificaron en la solicitud.

Desafortunadamente, no todas las funciones para trabajar con ODBC funcionan correctamente con MS Access, por ejemplo, las funciones odbc_num_rows y odbc_fetch_array. Entonces, en la versión de PHP que está instalada en mi computadora, PHP generalmente muestra un mensaje que indica que no conoce la función odbc_fetch_array. Pero estos problemas se pueden resolver describiendo las dos funciones siguientes y usándolas en lugar de las mencionadas anteriormente:

función xodbc_num_rows($sql_id, $CurrRow = 0)
{
$NúmRegistros = 0;
odbc_fetch_row($sql_id, 0);
mientras (odbc_fetch_row($sql_id))
{
$NúmRegistros++;
}
odbc_fetch_row($sql_id, $CurrRow);
devolver $NumRecords;
}
función xodbc_fetch_array($resultado, $número de fila=-1) (
si ($número de fila< 0) {
odbc_fetch_into($resultado, &$rs);
) demás (
odbc_fetch_into($resultado, &$rs, $número de fila);
}
foreach ($rs como $clave => $valor) (
$rs_assoc = $valor;
}
devolver $rs_assoc;
}

$res=odbc_exec($x,"seleccione * de la prueba");
$cnt=xodbc_num_rows($res);
?>



por ($i=0;$i<$cnt;$i++) {
$row=xodbc_fetch_array($res,$i+1);
eco " ";
}
?>
f1f2
".$fila["f1"]."".$fila["f2"]."

Popularidad SGBD de Microsoft Access (http://www.microsoft.com/office/access) se debe en parte a su interfaz gráfica fácil de usar. Además de utilizar Access como un DBMS independiente, puede utilizar su interfaz gráfica para organizar el trabajo con otras bases de datos, por ejemplo, MySQL o Microsoft SQL Server.

Para demostrar la compatibilidad con ODBC en PHP, describiré el proceso de conexión a bases de datos de Microsoft Access en PHP. Es sorprendentemente fácil de hacer, pero gracias a la popularidad de Microsoft Access, es una adición útil a su arsenal creativo. Describiré este proceso paso a paso:

  • Cree una base de datos de Access. Se supone que ya sabe cómo hacer esto, y si no sabe cómo, pero aún desea seguir la implementación de este ejemplo, utilice los servicios del programa asistente. Creé una base de datos estándar para almacenar información de contacto usando un asistente. Asegúrese de crear varios registros en la tabla y recuerde el nombre de la tabla, ¡lo necesitaremos pronto!
  • Guarde la base de datos en su computadora.
  • En el siguiente paso, organizaremos el acceso a la base de datos de Access utilizando ODBC. Seleccione Inicio > Configuración > Panel de control (Inicio > Ajustes > Panel de control). Localice el icono de Fuentes de datos ODBC (32 bits) en el Panel de control. Este icono inicia el Administrador ODBC, que está diseñado para configurar varios controladores y fuentes de datos en su sistema. Inicie el programa haciendo doble clic en este icono. La ventana Administrador se abre en la pestaña DSN de usuario de forma predeterminada. Esta pestaña enumera fuentes de datos que son específicas de un usuario específico y solo se pueden usar en esa computadora. En este ejemplo, esta es la fuente de datos que se utilizará.
  • Haga clic en el botón Agregar... en el lado derecho de la ventana. Se abre una nueva ventana para seleccionar un controlador diseñado para funcionar con la nueva fuente. Seleccione la línea Microsoft Access Driver (*.mdb) y haga clic en Finalizar.
  • Aparece una nueva ventana en la pantalla: Instalación del controlador ODBC para Microsoft Access (Configuración de ODBC Microsoft Access). Busque el cuadro de texto Nombre de la fuente de datos en el formulario e ingrese el nombre de la base de datos de Access que creó. Si lo desea, puede ingresar una descripción en el cuadro de texto ubicado directamente debajo del campo Nombre de la fuente de datos.
  • Haga clic en el botón Seleccionar...; aparece una ventana estilo Explorador de Windows. Le pide que busque una base de datos a la que se accederá mediante ODBC.
  • Busque su base de datos en el árbol de directorios y haga doble clic en ella. Volverá a la ventana Instalar el controlador ODBC para Microsoft Access. La ruta a la base de datos seleccionada se muestra encima del botón Seleccionar.... Haga clic en Aceptar.
  • ¡Listo! Ahora puede trabajar con una base de datos de Access usando ODBC.

Todo lo que tienes que hacer es crear un script en el que trabajarás con la base de datos vía ODBC. En el siguiente escenario, se utilizarán las funciones ODBC comunes (arriba) para mostrar toda la información de una tabla de contactos creada con el asistente de Access. Sin embargo, antes de considerar el escenario, es útil saber cómo se ve la tabla Contactos en Access (Figura 11.3).



Arroz. 11.3.Tabla de contactos en MS Access

Ahora que sabe qué información se recuperará de la base de datos, podemos pasar al script. Si ha olvidado qué hace una función, consulte la descripción al principio de este capítulo. Los resultados del Listado 11.7 se muestran en la Figura. 11.4.

Listado 11.7.Uso de funciones ODBC para trabajar con MS Access

// Conéctate a la fuente de datos ODBC "ContactDB" ;connect = odbc_connect("ContactDB", "","")

o morir("No se pudo conectar con la fuente de datos.");

//Crear texto de solicitud

$query = "SELECCIONE Nombre, Apellido, Teléfono celular, Correo electrónico DE Contactos";

//Preparar la solicitud

$resultado = odbc_prepare($conectar,$consulta);

// Ejecutar la consulta y mostrar los resultados.

odbc_execute($resultado);

odbc_result_all($resultado, "BGCOLOR="#c0c0c0" border=1");

// El procesamiento de los resultados está completo, memoria libre odbc_free_result($result);

// Cerrar la conexión odbc_close($connect);

¿No es todo sencillo? Lo mejor es que este script es totalmente compatible con cualquier otro DBMS que admita ODBC. Para practicar, intente repetir todos los pasos descritos para otro DBMS, ejecute el script y obtendrá los mismos resultados que se muestran en la Fig. 11.4.

Arroz. 11.4.Contenido de la tabla Contactos en un navegador web




Arriba