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 теперь загружен.