2008-10-08 18 views
10

Tengo un script que llama al mysql_connect() para conectarse a un DB de MySQL. Cuando ejecuto el script en un navegador, funciona. Sin embargo, cuando lo ejecuto desde una línea de comando recibo el siguiente error:PHP: mysql_connect() no funcionará a través de la línea de comando

Call to undefined function mysql_connect() 

Esto parece completamente paradójico. Alguien tiene alguna idea de cómo puedo ejecutarlo desde la línea de comandos. Por cierto, lo ejecuto desde un shell bash, así:

php /path/to/script.php 

Respuesta

2

Si bien puede ser una respuesta rudimentaria, asegúrese de que tiene la más actualizada de cliente fecha de PHP, y asegúrese de que está mirando la misma carpeta de PHP que estás trabajando a través de Apache.

Si eso no funciona, intente jugar con mysqli y ver si es globalmente para toda la parte de MySQL de PHP. Si mysqli funciona y mysql_connect() no, bueno, entonces es un buen momento para cambiar al lado OO :-)

10

Puede ser que use una configuración PHP predeterminada. He encontrado antes que no usa el mismo php.ini o no usa uno en absoluto. Por lo tanto, algunas de las extensiones no estarán habilitadas.

hacer esto en su lugar:

php -c /etc/php.ini /path/to/script.php 

Dónde /etc/php.ini es la ruta de acceso al archivo ini. Puede encontrar esto haciendo phpinfo();

+0

Lo siento, lo intenté pero sigo teniendo el mismo error. – CoolGravatar

+0

Asegúrese de que esa es la ruta a su archivo php.ini. –

+0

Hmm ... tendría sentido que funcionaría, pero todavía no funciona. – CoolGravatar

1

php-cli.ini podría ser el archivo que está utilizando su intérprete de línea de comandos php.

+0

Ni siquiera sabía que el archivo existía. Lo comprobaré. ¡Gracias! – CoolGravatar

1

Por favor asegúrese de que esta línea aparece en php.ini

extensión = php_mysql.dll

Tenga en cuenta que el php.ini utilizado en la línea de comandos puede ser diferente del php.ini utilizado por Apache.

+0

En mi caso, esa línea aparece (en el php.ini que 'phpinfo()' se refiere como 'Archivo de configuración cargada'), pero mysql_connect no funciona. Para que funcione, he tenido que cambiar esa línea a 'extension = ext \ php_mysql.dll' – Shawn

3

Comprobar si la versión de PHP cmd en realidad tiene soporte para MySQL:

 
<? php 
    echo php_info() 
?> 

Si no es así, probablemente es porque se trata de una versión diferente a la utilizada por el servidor web.

ejecutar PHP con el parámetro "-m" con el fin de enumerar todos los módulos compilados:

 
    $ php -m 

Debería ver el módulo "mysql". Si no es así, entonces supongo que la versión del cmd de php no se ha compilado utilizando el script --with-mysql o el guión "configurar" no podría incluirlo por algún motivo.

+0

Si php -m no muestra" mysql ", ¿qué puedo hacer para solucionar el problema? – Shawn

+0

@Shawn Si está en Linux, verifique que se haya instalado el paquete 'php5-mysql'. –

0

Este problema puede surgir cuando está ejecutando Mac OS X y MAMP. La versión de línea de comando intenta usar la versión MAC OS X, que no carga ningún php.ini por defecto.

Usted puede comprobar que con el comando:

php --ini 

Ver el archivo de configuración que falta?

Configuration File (php.ini) Path: /etc 
Loaded Configuration File:   !!! THE CONFIG FILE IS MISSING HERE !!! 
Scan for additional .ini files in: /Library/Server/Web/Config/php 
Additional .ini files parsed:  (none) 

Lo que tienes que hacer es cargar el php.ini de su elección y copiarlo en la ubicación predeterminada de su línea intérprete de comandos que es/etc y luego ejecutar el comando anterior de nuevo, debería ver que el archivo php.ini se carga que debe verse como:

Configuration File (php.ini) Path: /etc 
Loaded Configuration File:   /etc/php.ini 
Scan for additional .ini files in: /Library/Server/Web/Config/php 
Additional .ini files parsed:  (none) 

también debe agregar esto al archivo php.ini en/etc

mysql.default_socket = /Applications/MAMP/tmp/mysql/mysql.sock 

esto debería solucionar todos los problemas.

phew ..

0

Mi sistema es CentOS. En mi caso, la ruta a mysql.so es incorrecta.

Cuando escribo

php -m 

No hay mysql.

En mi /etc/php.d/mysql.ini originales no es sólo una línea:

extension=mysql.so 

lo que el uso de comandos:

rpm -ql php-mysql | grep mysql.so 

para averiguar el camino correcto, que es

/usr/lib64/php/modules/mysql.so 

entonces sustituye la línea a:

extension=/usr/lib64/php/modules/mysql.so 

entonces

service httpd restart 

y

php -m 

mysql está ahora cargado.

Cuestiones relacionadas