3

我刚刚实现了一个 PHP <-> MYSQL 接口。该实例似乎报告未安装 MYSQLI 插件,但是,所有其他指示都相反。

我的代码:

<?php
    error_reporting(E_ALL);
    ini_set('error_reporting', E_ALL);
    ini_set('display_errors', 'On');
    $mysql = mysqli_connect( 'localhost', 'EulerPhpUser', '*********' );
    // more code

错误信息:

致命错误:在第 27 行的 /var/www/html/euler/login.php 中调用未定义函数 mysqli_connect()

$ cat /etc/*-release
Amazon Linux AMI release 2013.03

这是我的 php.ini 文件的一部分

; Maximum number of links.  -1 means no limit.
; http://www.php.net/manual/en/mysqli.configuration.php#ini.mysqli.max-links
mysqli.max_links = -1

; Default port number for mysqli_connect().  If unset, mysqli_connect() will use
; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the
; compile-time value defined MYSQL_PORT (in that order).  Win32 will only look
; at MYSQL_PORT.
; http://www.php.net/manual/en/mysqli.configuration.php#ini.mysqli.default-port
mysqli.default_port = 3306

; Default socket name for local MySQL connects.  If empty, uses the built-in
; MySQL defaults.
; http://www.php.net/manual/en/mysqli.configuration.php#ini.mysqli.default-socket
mysqli.default_socket =

; Default host for mysql_connect() (doesn't apply in safe mode).
; http://www.php.net/manual/en/mysqli.configuration.php#ini.mysqli.default-host
mysqli.default_host =

; Default user for mysql_connect() (doesn't apply in safe mode).
; http://www.php.net/manual/en/mysqli.configuration.php#ini.mysqli.default-user
mysqli.default_user =

; Default password for mysqli_connect() (doesn't apply in safe mode).
; Note that this is generally a *bad* idea to store passwords in this file.
; *Any* user with PHP access can run 'echo get_cfg_var("mysqli.default_pw")
; and reveal this password!  And of course, any users with read access to this
; file will be able to reveal the password as well.
; http://www.php.net/manual/en/mysqli.configuration.php#ini.mysqli.default-pw
mysqli.default_pw =

; Allow or prevent reconnect
mysqli.reconnect = Off

这是我对 mysqli 的搜索产生结果的 phpifo() 的唯一部分

Configure Command 
'./configure' '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--target=x86_64-amazon-linux-gnu' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--localstatedir=/var' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--cache-file=../config.cache' '--with-libdir=lib64' '--with-config-file-path=/etc' '--with-config-file-scan-dir=/etc/php.d' '--disable-debug' '--with-pic' '--disable-rpath' '--without-pear' '--with-bz2' '--with-exec-dir=/usr/bin' '--with-freetype-dir=/usr' '--with-png-dir=/usr' '--with-xpm-dir=/usr' '--enable-gd-native-ttf' '--with-t1lib=/usr' '--without-gdbm' '--with-gettext' '--with-gmp' '--with-iconv' '--with-jpeg-dir=/usr' '--with-openssl' '--with-pcre-regex=/usr' '--with-zlib' '--with-layout=GNU' '--enable-exif' '--enable-ftp' '--enable-magic-quotes' '--enable-sockets' '--with-kerberos' '--enable-ucd-snmp-hack' '--enable-shmop' '--enable-calendar' '--without-sqlite' '--with-libxml-dir=/usr' '--enable-xml' '--with-system-tzdata' '--with-mhash' '--with-apxs2=/usr/sbin/apxs' '--libdir=/usr/lib64/php' '--enable-pdo=shared' '--with-mysql=shared,/usr' '--with-mysqli=shared,/usr/lib64/mysql/mysql_config' '--with-pdo-mysql=shared,/usr/lib64/mysql/mysql_config' '--with-pdo-sqlite=shared,/usr' '--without-gd' '--disable-dom' '--disable-dba' '--without-unixODBC' '--disable-xmlreader' '--disable-xmlwriter' '--without-sqlite3' '--disable-phar' '--disable-fileinfo' '--disable-json' '--without-pspell' '--disable-wddx' '--without-curl' '--disable-posix' '--disable-sysvmsg' '--disable-sysvshm' '--disable-sysvsem' 

最后,还有一点需要注意。我尝试运行以下代码,服务器返回一个完全空白的页面。没有错误,什么都没有。好像 php 在没有产生错误的情况下崩溃了。我不确定如何解释。

if (function_exists('mysqli_connect')) {
     echo 'mysqli is installed';
} 

我什至感到非常沮丧,以至于我尝试了一些 PDO,但随后出现错误连接失败:找不到驱动程序

4

5 回答 5

10

在 AWS 中,我收到了这个错误,发现我需要运行“yum install php-mysqli”。这是对 mysql 和 php 包的补充。

于 2014-05-17T17:03:45.013 回答
4

如果您安装了 php 7.1,例如

sudo yum install php71

您还需要单独安装 mysqli,例如

sudo yum install php71-mysqli

别跑

sudo yum install php-mysqli

因为这将安装 php 5

于 2017-12-28T07:48:42.317 回答
2

更新:

据我了解,您的 PHP 安装已在mysqli支持下编译,但未启用该模块。为什么?因为您指定 中的唯一引用mysqli是. 如果启用它, 应该会显示一个类似的表格。phpinfo()Configure Command这个

所以,也许,您只是没有取消注释php.ini文件中的扩展行:

extension=mysqli.so

初始帖子:

根据官方文档

要检查系统是否正在使用配置文件,请尝试检索 cfg_file_path 配置设置的值。如果可用,则使用配置文件。

换句话说,您可以检查您的 php.ini 文件是否被考虑在内(它可能位于错误的路径中)。尝试:

<?php echo 'Configuration file (php.ini) path: ', get_cfg_var('cfg_file_path');
于 2013-07-01T21:17:37.783 回答
1

我可以在 Amazon Linux 将 PHP 从 5.3 升级到 5.6 时确认此错误。

没有php56-mysqli包裹。有php56-mysqlnd,我已经安装了。php-mysqli是 5.3 版本 [在 AWS Linux 上]。

问题是安装程序留下了一些 PHP 5.3 部分,特别是/usr/bin/php(!)。

要更正此问题,请运行:

$ alternatives --force --refresh php

需要标志--force来使alternatives覆盖文件留在链接应该在的位置。

于 2018-10-09T12:28:43.650 回答
0
yum -y install php-mysqlnd

如果安装了 mysqlnd,mysqli 将使用 ^^

有美好的一天!

在终端检查启用 mysqli

php -r "phpinfo();"
于 2021-08-09T01:11:43.350 回答