Esta sección contiene preguntas comunes sobre la relación entre PHP y bases de datos. Sí, PHP puede acceder a prácticamente cualquier base de datos disponible hoy en día.
He escuchado que es posible acceder a Microsoft SQL Server desde PHP. ¿Cómo?
En máquinas Windows, puede simplemente usar el soporte ODBC incluido y el controlador ODBC apropiado.
En máquinas Unix, es posible usar el controlador Sybase-CT para acceder a Servidores Microsoft SQL ya que son compatibles (en su mayoría) al nivel del protocolo. Sybase ha creado una » versión gratuita de las bibliotecas necesarias para sistemas Linux. Para otros sistemas operativos Unix, necesita ponerse en contacto con Sybase para obtener las bibliotecas correctas. Consulte también la respuesta a la siguiente pregunta.
¿Puedo acceder a bases de datos Microsoft Access?
Si. Usted ya tiene todas las herramientas necesarias si está corriendo enteramente bajo Windows 9x/Me, o NT/2000, en donde es posible usar ODBC y los controladores ODBC para bases de datos Microsoft Access.
Si está corriendo PHP en una máquina Unix y desea comunicarse con MS Access en una máquina Windows, necesitará controladores ODBC para Unix. » OpenLink Software tiene controladores ODBC basados en Unix que tienen esa capacidad.
Otra alternativa consiste en usar un servidor SQL que tenga controladores ODBC Windows y usarlo para almacenar los datos, a los cuales puede acceder desde Microsoft Access (usando ODBC) y PHP (usando los controladores incorporados), o usar un formato de archivo intermedio que Access y PHP entiendan, como archivos planos o bases de datos dBase. Sobre este punto, Tim Hayes de OpenLink software escribe:
Usar otra base de datos como intermediario no es una buena idea, cuando es posible usar ODBC desde PHP directamente a su base de datos - es decir, con los controladores de OpenLink. Si realmente necesita usar un formato de archivo intermedio, OpenLink ha lanzado ahora Virtuoso (un motor de bases de datos virtual) para NT, Linux y otras plataformas Unix. Por favor visite nuestro » sitio web para una descarga gratuita.
Una opción que ha sido probada con éxito es usar MySQL y sus controladores MyODBC en Windows y sincronizar las bases de datos. Steve Lawrence escribe:
Consejos y Trucos:
He actualizado a PHP 4, y ahora mysql me dice persistentemente "Warning: MySQL: Unable to save result set in ...". ¿Qué sucede?
Lo más posible es que PHP 4 haya sido compilado con la opción --with-mysql, sin especificar la ruta a MySQL. Esto quiere decir que PHP está usando su biblioteca cliente de MySQL incorporada. Si su sistema está ejecutando aplicaciones, tales como PHP 3 como un módulo concurrente de Apache, o auth-mysql, que usan otras versiones de cliente MySQL, entonces existe un conflicto entre las dos versiones diferentes de esos clientes.
Recompilar PHP 4, y agregar la ruta a la bandera MySQL, '--with-mysql=/su/ruta/hacia/mysql' por lo general resuelve este problema.
PHP 5 ya no incluye bibliotecas cliente de MySQL, ¿qué representa esto para mí? ¿Aun puedo usar MySQL con PHP? Intento usar MySQL y obtengo errores de tipo "function undefined", ¿qué pasa?
Si. Siempre habrá soporte MySQL en PHP en una forma u otra. El único cambio en PHP 5 es que ya no distribuimos la biblioteca cliente como tal. Algunas razones, sin orden alguno en particular:
La mayoría de sistemas en la actualidad ya tienen la biblioteca cliente instalada.
Dado lo anterior, tener versiones múltiples de la biblioteca puede causar problemas. Por ejemplo, si enlaza mod_auth_mysql contra una versión y PHP contra otra, y luego habilita ambos en Apache, obtendrá un bonito y gordo fallo. Asimismo, la biblioteca distribuida no siempre jugaba bien con la versión del servidor instalada. El síntoma más obvio de esta situación es el desacuerdo sobre el lugar en donde encontrar el archivo de sockets de dominio Unix mysql.socket.
Su mantenimiento era un poco laxo y estaba quedándose cada vez más atrás de la versiones lanzadas.
Las versiones futuras de la biblioteca están bajo la GPL y por lo tanto no contamos con una ruta de actualización, ya que no podemos distribuir una biblioteca GPL en un proyecto con licencia tipo BSD/Apache. Un corte limpio en PHP 5 parecía la mejor opción.
Esto en realidad no afectará a muchos. Los usuarios de Unix, por lo menos aquellos que saben lo que están haciendo, tienden a compilar siempre PHP contra sus bibliotecas de sistema libmyqlclient agregando la opción --with-mysql=/usr cuando se compila PHP. Los usuarios de Windows pueden habilitar la extensión php_mysql.dll al interior de php.ini. Para más detalles, vea la Referencia de MySQL sobre las instrucciones de instalación. También, asegúrese de que libmysql.dll se encuentre disponible en el PATH del sistema. Para más detalles sobre el cómo, lea el FAQ sobre configurar el valor PATH en sistemas Windows. Dado que libmysql.dll (y varios otros archivos relacionados) existen en la carpeta de PHP, usted querrá agregar la carpeta de PHP al PATH del sistema.
Después de instalar el soporte de MySQL compartido, Apache produce un volcado de memoria tan pronto libphp4.so se carga. ¿Puede solucionarse esto?
Si sus bibliotecas de MySQL están enlazadas contra pthreads ocurrirá esto. Verifique usando ldd. Si lo están, obtenga las fuentes de MySQL y compile desde allí, o re-compile desde el rpm fuente y elimine el conmutador en el archivo spec que habilita el código de cliente con hilos. Cualquiera de estas sugerencias solucionará el problema. Luego recompile PHP con las nueval bibliotecas MySQL.
¿Porqué recibo un error que luce algo así: "Warning: 0 is not a MySQL result index in <archivo> on line <x>" o "Warning: Supplied argument is not a valid MySQL result resource in <archivo> on line <x>"?
Está intentando usar un identificador de resultado que es 0. El 0 indica que su consulta falló por alguna razón. Necesita verificar errores después de enviar una consulta y antes de que intente usar el identificador de resultado devuelto. La manera apropiada de hacerlo es con un código similar al siguiente:
<?php
$resultado = mysql_query("SELECT * FROM tablas_priv");
if (!$resultado) {
echo mysql_error();
exit;
}
?>
<?php
$resultado = mysql_query("SELECT * FROM tablas_priv")
or die("Consulta fallida: " . mysql_error());
?>