У меня есть сценарий, который вызывает mysql_connect() для подключения к базе данных MySQL. Когда я запускаю скрипт в браузере, он работает. Однако когда я запускаю его из командной строки, я получаю следующую ошибку:
Call to undefined function mysql_connect()
Это кажется совершенно парадоксальным. У кого-нибудь есть идеи, как я могу запустить его из командной строки. Кстати, я запускаю его из оболочки bash вот так:
php /path/to/script.php






Хотя это может быть элементарный ответ, убедитесь, что у вас самый последний клиент PHP, и убедитесь, что он смотрит на ту же папку PHP, с которой вы работаете через Apache.
Если это не сработает, попробуйте поиграть с mysqli и посмотрите, будет ли это глобально для всей MySQL-части PHP. Если mysqli работает, а mysql_connect () - нет, тогда самое время переключиться на объектно-ориентированную сторону :-)
Возможно, используется конфигурация PHP по умолчанию. Раньше я обнаруживал, что он не использует тот же самый php.ini или не использует его вообще. Поэтому некоторые расширения не будут включены.
Вместо этого сделайте это:
php -c /etc/php.ini /path/to/script.php
Где /etc/php.ini - это путь к вашему ini-файлу. Вы можете найти это, выполнив phpinfo();
Хм ... было бы логично, что это сработает, но все равно не работает.
Кстати, я использовал путь к моему файлу php.ini, как указано в phpinfo ()
Вы проверили, загружено ли расширение MySQL в php.ini, на который вы ссылаетесь. Вы всегда можете попробовать запустить phpinfo () из командной строки. Его будет трудно читать, но он покажет, загружен ли у вас MySQL и использует ли он php.ini, который вы ему сказали.
Действительно ли этот php.ini существует по указанному вами пути?
Когда я запускаю phpinfo (), это означает, что расширение загружено. Но когда я запускаю команду php -i, это означает, что я этого не делаю. Может, у меня на руках совсем другая проблема.
Это точная команда, которую я использую: / usr / bin / php -c /etc/php.ini -f /full/path/to/script.php Я также работаю под тем же пользователем, что и другой "обычный" «PHP скрипт.
Я выполнил эту точную команду, за исключением моего файла php.ini, указанного в phpinfo (), и полного пути к моему файлу, но она по-прежнему не работает. Я получаю ту же ошибку. Кроме того, к вашему сведению, я могу нормально войти в MySQL через командную строку
Есть ли у php.ini extension = mysql.so?
Я не смог найти его в своем php.ini. Но phpinfo () указывает на наличие модуля MySQL. Разве это не было бы результатом наличия extension = mysql.so в моем php.ini?
да. Возможно, у вас нет нужного файла php.ini. Вы вообще chroot'ом?
php-cli.ini может быть файлом, который использует интерпретатор php командной строки.
Я даже не знал, что этот файл существует. Я проверю это. Спасибо!
Убедитесь, что эта строка присутствует в php.ini
extension = php_mysql.dll
Обратите внимание, что php.ini, используемый в командной строке, может отличаться от php.ini, используемого apache.
В моем случае эта строка действительно появляется (в php.ini, который phpinfo() называет Loaded Configuration File), но mysql_connect не работает. Чтобы это работало, мне пришлось изменить эту строку на extension=ext\php_mysql.dll.
Проверьте, действительно ли ваша версия php cmd поддерживает mysql:
<? php echo php_info() ?>
Если нет, то, вероятно, это потому, что это другая версия, чем та, которая используется вашим веб-сервером.
Запустите php с параметром «-m», чтобы вывести список всех скомпилированных модулей:
$ php -m
Вы должны увидеть модуль «mysql». Если нет, то я предполагаю, что версия php cmd не была скомпилирована с использованием --with-mysql или сценарий "configure" не смог включить ее по какой-то причине.
Если php -m не показывает «mysql», что я могу сделать, чтобы решить проблему?
@Shawn Если вы работаете в Linux, убедитесь, что пакет php5-mysql установлен.
Эта проблема может возникнуть при использовании 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
Это должно решить все проблемы.
уф ..
Обновление php.ini для записи mysql.default_socket (mysql.default_socket = /Applications/MAMP/tmp/mysql/mysql.sock) эффективно решает проблему в Mac OS с помощью MAMP.
Моя система - 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 теперь загружен.
Убедитесь, что это путь к вашему файлу php.ini.