ene 27, 2010 - php    16 Comments

Solucionar “Undefined function mssql_connect()”

Seguramente a más de uno le ha pasado y le está pasando, por eso llegó a este humilde blog, me estoy refiriendo al Fatal error lanzado por php cuando se intenta realizar una conexión hacia una base de datos Microsoft SQL Server, el error es similar al siguiente:

Fatal error: Call to undefined function mssql_connect() in X:\ServerPath\www\connexion.php on line 12

Se puede presentar en servidores con las siguientes características:

Windows Server 2003 + IIS + SQL Server 2005 + php

Windows Server 2003 + Apache + SQL Server 2005 + php

Bueno, realmente ocurre casi independientemente del Sistema Operativo, ya que el error es causado por el php, al no poder cargar la extensión para el manejo de dicha función.

Causas:

Puede ser causado por mala configuración del archivo php.ini, así también por la librería ntwdblib.dll, puesto que la versión original, la 2000.2.8.0 de dicha librería tiene algún conflicto con las conexiones hacia SQL 2005, incluido SQL Express 2005 (no me pregunten por que xD) ver imagen:

http://img402.imageshack.us/img402/9013/ntwdblib2000280.png

Esta librería debe ser reemplazada por la versión 2000.80.194.0 para poder corregir el problema, como se ve a continuación:

Esta librería debe sobre escribir la que se encuentra en el directorio del php, si no sabes como encontrar dicho directorio, es muy fácil, solo debes dar clic en inicio, luego clic en ejecutar y escribir cmd, luego tecleas echo %path% y mostrará algo como lo siguiente, donde lo importante es ver la ruta del php, en mi caso la unidad D es en la que tengo el AppServ:

También debe copiarse el archivo ntwdblib.dll dentro del directorio de Windows, normalmente será: C:\Windows

Configuración de PHP.ini

Las líneas importantes para nuestro caso práctico son las líneas 470, 471 , 597 y 598.

La línea 470 y 471 respectivamente, muestran lo siguiente:

; Directory in which the loadable extensions (modules) reside.
extension_dir = “.;”


el contenido entre ” comillas, puede variar y en algunos casos contendrá algo como:

“c:\ubicacion_aplicacion\/php5/ext”

lo cual se debe corregir a:

“c:\ubicacion_aplicacion\php5\ext”

en mi caso:

Luego de hacer estas correcciones, se deben quitar los ; punto y coma de las líneas 597 y 598 o para ser más específico, donde se encuentre lo siguiente:

;extension=php_msql.dll
;extension=php_mssql.dll

Ahora, solo se debe reiniciar los servicios, si no sabes, para no hacer más largo este manual, solo reinicia el equipo.

Por último, dejo las descargas de los archivos de este manual.

Descargar ntwdblib.dll Descargar Todos los archivos (incluye este manual en formato docx)

Contraseña para descomprimir: www.fiestachapina.net

16 Comments

  • Muchas gracias! Me has salvado la vida.

  • EC-Lente hermano, por fin corrio esta chimbada….!

  • Gracias grandes….,

  • Hola Omar, tanto el appserv como el xampp, wamp o incluso otro software que incluya el pack de programas necesarios para montar un web server con soporte PHP debería ser compatible con esta solución, ya que como dice el post, este error es causado por las librerías del php, puntos importantes que debes considerar es la ubicación de la librería y la correcta configuración del archivo php.ini, si nos pudieras dar más datos quizá podríamos ayudarte, saludos.

  • Tengo un lió necesito hacer esta conexión en otro servidor web distinto a appserv, alguno tal como Xampp o en php y apache por separado
    es posible hacer la conexión por que estos mismos datos no me funcionan en Xampp tengo sql server 2005 y Xampp 1.7.3

    les agradecería mucho la ayuda

  • Gracias por los comentarios Luis, igualmente, le dí una vista rápida a tu blog y está muy interesante, incluso dejé tu enlace, saludos.

  • muy buen aporte, me ayudo mucho, por cierto muy buen blog

  • Muchisimas gracias por la informacion, me habeis dado la vida churras!! solo un apunte ..
    Para los que trabajen con windows 64 bit, copiar tambien la nueva version del archivo ntwdblib en Windows > SysWow64.

  • gracias gracias me funciono pero ahora je ando busncando como hago la conexion de la base de datos gracias por el post

  • Hola:

    yo tambien tenia un problema con el mssql, lo que hice fue copiar el archivo ntwdblib.dll ubicado en la ruta “C:\AppServ\php5” a “C:\Windows\SysWOW64”…y si me funciono

    NOTA: La version de windows “windows server 2008 R2…appserv 5.2.10″

  • El factor a considerar es la versión del appserv porque con esto se relaciona el driver que se tiene para mssql, si prefieres agregame al msn: soporte [arroba] ia2web [.] com

  • Buenos dias, he hecho todo lo que indicas ahi pero sigo obteniendo el mismo error.
    el sql que estoy corriendo trabaja sobre x64

    al igual appserver que instale…

    podria ser esto?

  • esta muy bueno el aporte, pero me ha pasado algo muy extraño.

    resulta que estoy trabajando php + apache + sql server 2005, realice todos los pasos que mencionas en esta publicacion y en otras mas que hay en la web. el hecho es que me funciono la conexion y el sistema estuvo trabajando bien durante un dia completo.

    al dia siguiente ya me salia el error de:

    Warning: mssql_connect() [function.mssql-connect]: Unable to connect to server: AXON_SERVER……

    muy extraño ya que no le hice ningun cambio ni al archivo php.ini, ni a las dll`s… en fin no se que paso.

    yo considero que el problema puede estar en la configuracion de la base de datos, ¿sabes si en la base de datos el usuario utilizado para la conexion deba tener alguna configuracion especial??

    no se que mas pueda ser lo que este pasando

    HELP…..

    gracias

  • mmm pues a decir verdad solo me queda la duda si reiniciaste correctamente los servicios o en todo caso, reinicia el sistema en la máquina virtual, ojo, no solo apagues o cierres la máquina virtual, pídele que guarde los cambios para reiniciar, porque podría estar perdiendo los cambios.

    Saludos, me gustaría tener más datos

  • pues mira ya lo intente pero aun asi en el phpinfo no aparece el servicio de mssql ña neta ya me desespere ojala que me puedas ayudar un poco en este caso te esplico rapido como lo hice.
    en una maquina virtual instale el windows 2003 el appserv 2.5.9, reemplace la libreria, descomente lo comentado, la ruta de los directorios estan correctos, ahora dime que crees que sea lo que pase por que la neta ya nole encuantro saludos y gracias de antemano

  • Muy buen aporte, gracias me ayudo, en todo.

Got anything to say? Go ahead and leave a comment!