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

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

Call to undefined function mysql_connect()

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

php /path/to/script.php
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
11
0
15 377
7

Ответы 7

Хотя это может быть элементарный ответ, убедитесь, что у вас самый последний клиент 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.

Darryl Hein 08.10.2008 07:48

Хм ... было бы логично, что это сработает, но все равно не работает.

CoolGravatar 08.10.2008 07:53

Кстати, я использовал путь к моему файлу php.ini, как указано в phpinfo ()

CoolGravatar 08.10.2008 07:55

Вы проверили, загружено ли расширение MySQL в php.ini, на который вы ссылаетесь. Вы всегда можете попробовать запустить phpinfo () из командной строки. Его будет трудно читать, но он покажет, загружен ли у вас MySQL и использует ли он php.ini, который вы ему сказали.

Darryl Hein 08.10.2008 07:55

Действительно ли этот php.ini существует по указанному вами пути?

Darryl Hein 08.10.2008 07:57

Когда я запускаю phpinfo (), это означает, что расширение загружено. Но когда я запускаю команду php -i, это означает, что я этого не делаю. Может, у меня на руках совсем другая проблема.

CoolGravatar 08.10.2008 08:01

Это точная команда, которую я использую: / usr / bin / php -c /etc/php.ini -f /full/path/to/script.php Я также работаю под тем же пользователем, что и другой "обычный" «PHP скрипт.

Darryl Hein 08.10.2008 08:05

Я выполнил эту точную команду, за исключением моего файла php.ini, указанного в phpinfo (), и полного пути к моему файлу, но она по-прежнему не работает. Я получаю ту же ошибку. Кроме того, к вашему сведению, я могу нормально войти в MySQL через командную строку

CoolGravatar 08.10.2008 08:14

Есть ли у php.ini extension = mysql.so?

Darryl Hein 08.10.2008 08:19

Я не смог найти его в своем php.ini. Но phpinfo () указывает на наличие модуля MySQL. Разве это не было бы результатом наличия extension = mysql.so в моем php.ini?

CoolGravatar 08.10.2008 08:24

да. Возможно, у вас нет нужного файла php.ini. Вы вообще chroot'ом?

Darryl Hein 08.10.2008 08:53

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

Я даже не знал, что этот файл существует. Я проверю это. Спасибо!

CoolGravatar 08.10.2008 07:40

Убедитесь, что эта строка присутствует в php.ini

extension = php_mysql.dll

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

В моем случае эта строка действительно появляется (в php.ini, который phpinfo() называет Loaded Configuration File), но mysql_connect не работает. Чтобы это работало, мне пришлось изменить эту строку на extension=ext\php_mysql.dll.

Shawn 27.06.2012 19:38

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

 <? php
  echo php_info()
 ?>

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

Запустите php с параметром «-m», чтобы вывести список всех скомпилированных модулей:

  $ php -m

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

Если php -m не показывает «mysql», что я могу сделать, чтобы решить проблему?

Shawn 27.06.2012 19:32

@Shawn Если вы работаете в Linux, убедитесь, что пакет php5-mysql установлен.

Halle Knast 17.12.2015 16:28

Эта проблема может возникнуть при использовании 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.

wiredolphin 05.09.2019 16:56

Моя система - 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 теперь загружен.

Другие вопросы по теме