【问题标题】:PHP: mysql_connect() won't work via command linePHP:mysql_connect() 无法通过命令行工作
【发布时间】:2017-05-09 08:41:12
【问题描述】:

我有一个脚本,它调用mysql_connect() 来连接到 MySQL 数据库。当我在浏览器中运行脚本时,它可以工作。但是,当我从命令行运行它时,我收到以下错误:

Call to undefined function mysql_connect()

这似乎完全自相矛盾。任何人都对我如何从命令行运行它有任何想法。顺便说一句,我像这样从 bash shell 运行它:

php /path/to/script.php

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    它可能使用默认的 PHP 配置。我之前发现它不使用相同的 php.ini 或根本不使用一个。因此某些扩展将无法启用。

    改为这样做:

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

    /etc/php.ini 是您的 ini 文件的路径。你可以通过phpinfo();找到这个

    【讨论】:

    • 确保这是您的 php.ini 文件的路径。
    • 嗯......它会起作用是有道理的,但它仍然不起作用。
    • 顺便说一句,我确实使用了 phpinfo() 中指定的 php.ini 文件的路径
    • 您是否检查过您所引用的 php.ini 是否已加载 MySQL 扩展。您可能总是尝试从命令行运行 phpinfo()。这将很难阅读,但会告诉您 MySQL 是否已加载以及它是否正在使用您告诉它的 php.ini。
    • 那个 php.ini 是否真的存在于你使用的路径中?
    【解决方案2】:

    检查你的php cmd版本是否真的支持mysql:

    php 回声 php_info() ?>

    如果不是,那么可能是因为它与您的网络服务器使用的版本不同。

    使用“-m”参数运行 php 以列出所有已编译的模块:

    $ php -m

    您应该看到“mysql”模块。如果没有,那么我猜 php cmd 版本没有使用 --with-mysql 编译,或者“配置”脚本由于某种原因无法包含它。

    【讨论】:

    • 如果 php -m 没有显示“mysql”,我该如何解决这个问题?
    • @Shawn 如果您使用的是 Linux,请检查是否已安装 php5-mysql 软件包。
    【解决方案3】:

    虽然这可能是一个初步的答案,但请确保您拥有最新的 PHP 客户端,并确保它正在查看您正在通过 Apache 处理的同一 PHP 文件夹。

    如果这不起作用,请尝试使用 mysqli 并查看它是否适用于 PHP 的整个 MySQL 部分。如果 mysqli 有效,而 mysql_connect() 无效,那么,这是切换到 OO 方面的最佳时机:-)

    【讨论】:

      【解决方案4】:

      php-cli.ini 可能是你的命令行 php 解释器正在使用的文件。

      【讨论】:

      • 我什至不知道该文件存在。我会检查一下。谢谢!
      【解决方案5】:

      请确保此行出现在 php.ini 中

      extension=php_mysql.dll

      请注意,命令行使用的php.ini可能与apache使用的php.ini不同。

      【讨论】:

      • 就我而言,该行确实出现了(在 php.ini 中 phpinfo() 指的是 Loaded Configuration File),但 mysql_connect 不起作用。为了使它工作,我不得不将该行更改为extension=ext\php_mysql.dll
      【解决方案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 文件。 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)
      

      您还应该将此添加到 /etc 中的 PHP.ini 文件中

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

      这应该可以解决所有问题。

      呼……

      【讨论】:

      • 更新mysql.default_socket 条目 (mysql.default_socket = /Applications/MAMP/tmp/mysql/mysql.sock) 的 php.ini 有效地解决了 Mac OS 上的问题,使用 MAMP。
      【解决方案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 现已加​​载完毕。

      【讨论】:

        猜你喜欢
        • 2015-12-27
        • 2011-03-06
        • 2016-08-27
        • 2016-07-03
        • 2013-01-18
        • 1970-01-01
        • 1970-01-01
        • 2019-06-25
        • 1970-01-01
        相关资源
        最近更新 更多