PHP: mysql_connect() не будет работать через командную строку

У меня есть script, который вызывает mysql_connect() для подключения к базе данных MySQL. Когда я запускаю script в браузере, он работает. Однако, когда я запускаю его из командной строки, я получаю следующую ошибку:

Call to undefined function mysql_connect()

Это кажется совершенно парадоксальным. У любого есть идеи, как я могу запустить его из командной строки. Btw, я запускаю его из оболочки bash, например:

php /path/to/script.php

Ответ 1

Возможно, он использует конфигурацию PHP по умолчанию. Я обнаружил, что он не использует тот же php.ini или не использует его вообще. Поэтому некоторые расширения не будут включены.

Сделайте это вместо:

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

Где /etc/php.ini - путь к вашему ini файлу. Вы можете найти это, выполнив phpinfo();

Ответ 2

Проверьте, действительно ли у php cmd-версии есть поддержка mysql:

 <? php
  echo php_info()
 ?>

Если нет, то, вероятно, это потому, что она отличается от версии, используемой вашим веб-сервером.

Запустите php, используя параметр "-m", чтобы перечислить все скомпилированные модули:

  $ php -m

Вы должны увидеть модуль "mysql". Если нет, то я думаю, что версия php cmd не была скомпилирована с использованием -with-mysql, или "configure" script не смог включить ее по какой-то причине.

Ответ 3

Хотя это может быть рудиментарный ответ, убедитесь, что у вас есть самый современный PHP-клиент, и убедитесь, что он смотрит на ту же папку PHP, с которой вы работаете через Apache.

Если это не сработает, попробуйте сыграть с mysqli и посмотрите, глобально ли это для всей части PHP MySQL. Если mysqli работает, и mysql_connect() не делает этого, то, что, как хорошее время, как любой из swtich на сторону OO: -)

Ответ 4

php-cli.ini может быть файлом, который использует ваш интерпретатор php-интерпретатора командной строки.

Ответ 5

Пожалуйста, убедитесь, что эта строка отображается в php.ini

расширение = php_mysql.dll

Обратите внимание, что php.ini, используемый в командной строке, может отличаться от php.ini, используемого apache.

Ответ 6

Эта проблема может возникнуть, если вы используете Mac OS X и MAMP. Версия командной строки пытается использовать версию MAC OS X, которая по умолчанию не загружает php.ini.

Вы можете проверить это с помощью команды:

php --ini

См. отсутствующий файл конфигурации?

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)

Что вам нужно сделать, загрузите php.ini по своему выбору и скопируйте его по умолчанию в свой интерпретатор командной строки, который есть /etc, а затем снова запустите указанную выше команду, вы увидите, что php. ini, который должен выглядеть так:

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)

Вы также должны добавить это в файл PHP.ini в /etc

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

Это должно исправить каждую проблему.

уф..

Ответ 7

Моя система - CentOS. В моем случае путь к mysql.so неверен.

Когда я печатаю

php -m

Нет mysql.

В моем исходном файле /etc/php.d/mysql.ini существует только одна строка:

extension=mysql.so

Итак, я использую команду:

rpm -ql php-mysql | grep mysql.so

чтобы узнать правильный путь, который

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

то я заменил строку на:

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

то

service httpd restart 

и

php -m

mysql теперь загружен.