「致命的なエラー:クラス 'MySQLi'が見つかりません」を解決する方法?


92

私はチュートリアルをやっていて、このエラーが出ます:

致命的なエラー:8行目にクラス「MySQLi」が見つかりません(LONG URL)

8行目のコードは次のとおりです。

$mysqli = new MySQLi($db_server, $db_user, $db_pass, $db_name);

オンラインで誰かが私のphpinfo()でオンになっているかどうかを確認するように言われたのを見ましたが、「mysqli」については何もリストされていませんでした。

また、PHPバージョン5.2.5を実行しています。


手書きのMYSQLiクラスを使用できるため、mysqliをインストールする必要はありません。サーバーを所有していない場合は、これが唯一のソリューションです。
ニワトリ

回答:


83

MySQLiインストールするだけでいいようです。

それでも問題が解決しないと思われる場合は、オペレーティングシステムと、さらに診断に役立つと思われるものを投稿してください。


20
AWSでは、実行するだけですsudo yum install php-mysqli
bobobobo

私にとっては、apt-get install php7.0-mysqlで修正されました。私はRaspbian Stretch 9
negrotico19で

Amazon Linuxを使用するAWSでは、次のようになりますsudo yum install php56-mysqlnd.x86_64(インストールしたphpのバージョンに一致するものを選択してください)
auspicious99

46

次のコードを実行すると、mysqliライブラリが存在するかどうかを確認できます。

if (!function_exists('mysqli_init') && !extension_loaded('mysqli')) {
    echo 'We don\'t have mysqli!!!';
} else {
    echo 'Phew we have it!';
}

6
「mysqliがありません!!!」`sudo apt-get install php5-mysqlnd`を実行した後でも?
Banned_User

'Phew we have it'が表示されますが、クラス 'msqli'が見つからないのと同じエラーが発生し続けます。
PA-GW

36

Ubuntuを使用している場合は、次のコマンドを実行します。

 sudo apt-get install php5-mysqlnd

5
そして、この後にApacheを再起動することを忘れないでください!
fracz 2015年

@fracz Apacheの再起動は忘れていた部分です。MySQLのみを再起動しました。ありがとう。
ジェームズ

これはたりない。私はまだphp5-mysqlパッケージが不足していました。sudo apt-get -y install php5-mysql php5-mysqlnd両方を取得するために使用します。@Hermann Ingjaldsson?
Balmipour 2015

なんらかの構成エラーでした。stackoverflow.com/questions/31535173/...
Fzs2

21

名前空間のあるクラス内から「new mysqli(..)」を呼び出している場合、同様のエラーが表示されることがありますFatal error: Class 'foo\bar\mysqli' not found in。これを修正する方法は、次のように前にバックスラッシュを付けてルート名前空間に明示的に設定することです:

<?php 
$mysqli = new \MySQLi($db_server, $db_user, $db_pass, $db_name);

1
これは最初に見るべきものです。
James Bailey、

15

コメント解除に加えてphp_mysqli.dllの中に拡張子のphp.iniを、またコメント解除のextension_dirの中にディレクティブphp.iniをし、あなたの場所を指定します。

extension_dir = "C:\software\php\dist\ext"

これでうまくいきました。


それは私にとってはうまくいきましたが、./extそれは相対パスです。そして、そのファイルの名前を変更php.ini-developmentphp.iniてコメントを外す必要がありましたextension=php_mysqli.dll。おお、PHPを見逃していません。
Overdrivr 2017年

私にとって(Windowsでの)トリックは、「extension_dir」に拡張機能ディレクトリへの絶対パスを入力することでした。
TechNyquist


2

php.iniでmysqliを有効にする方法

  1. 「;」(コロン)を削除して編集/コメント解除します。php.iniの次の設定: 1st(コメント解除して設定を追加):include_path = "C:\ php \ includes" 2nd(コメント解除):extension_dir = "ext" 3rd(コメント解除)そしてconfigを編集してください):extension = C:/PHP/ext/php_mysql.dll extension = C:/PHP/ext/php_mysqli.dll
  2. IISサーバーを再起動します。
  3. mysqlがシステムで実行されていることを確認します。

php.iniファイルの読み込み方法

  1. ファイルphp.ini-production / php.ini-developmentのいずれかの名前をC:\ PHPからphp.iniに変更します(拡張はini、つまり「php.ini」になります)。
  2. php.iniファイルに名前を変更した後、サーバーを再起動します
  3. http://localhost/phpinfo.phpで変更を確認してください

2

Dockerを使用している場合...

php-container RUN内:

#docker-php-ext-install mysqli

#apachectl restart

1
これは質問に対する答えを提供しません。批評したり、著者に説明を求めたりするには、投稿の下にコメントを残してください。- レビューから
Erwan

@Erwanそれは実際にそうします
あなたの常識


1

Namescoサーバーを使用して、同じ問題のある人を手助けできると思いました。ホームPCのローカルサーバーからnamescoにデータベースを移動した後、この問題を修正しようとしています。彼らはコーディングの問題だと言った彼らを助けませんでした。

  • ただし、CPANEl LINUXホスティングインターフェイスから修正するのは簡単でした。
  • phpをクリックします。
  • 次に、phpモジュールをクリックし、プリインストールされているモジュールのリストから、mysqliのボックスをクリックします。
  • 次に[保存]をクリックします。(別のサーバーで機能した場合、コードを変更する必要はありません。)

残念ながら、彼らのサポート記事は時間の無駄でした。これを読んだ後、私は新しい決意を持って管理インターフェイスに行きました。


0

一部のディストリビューション(Gentooなど))は、PHPの複数のインストールをサポートしており、mysqliがインストールされて有効になっているものを使用していることを確認する必要があります。

Gentooに新しいmysqlをインストールしました(mysqli USEフラグを有効にした)が、新しいバージョンのPHPをアクティブにする必要がありました(古いバージョンにはmysqliがないため)。

# eselect php list apache2
  [1]   php5.3 *
  [2]   php5.5
# eselect php set apache2 2
You have to run `/etc/init.d/apache2 restart' for the changes to take effect
# /etc/init.d/apache2 restart

0

上記のすべてを確認しましたが、うまくいきませんでした。

私が見つけたいくつかのステップがあります。

私が使用PHPバージョン5.5.9-1ubuntu4.17をのUbuntu 14.04

最初にフォルダを確認してください

#ls /etc/php5/mods-available/
json.ini  mcrypt.ini  mysqli.ini  mysql.ini  mysqlnd.ini  opcache.ini  pdo.ini  pdo_mysql.ini  readline.ini  xcache.ini

mysqli.iniが含まれていない場合をインストールするための他の回答を読んでください。

php.ini検索extension_dirを開く

私の場合、設定する必要があります extension_dir = /usr/lib/php5/20121212

そしてapache2を再起動します: /ect/init.d/apache2 restart


0

PHP zipには、\ extディレクトリの下に一般的に使用されるほとんどの拡張機能(php_mysqli.dllなどのWindowsでは* .dll)が含まれていますが、デフォルトでは有効になっていません。MySQLiを使用しようとすると、次の致命的なエラーが発生する可能性があります。

( ! ) Fatal error: Uncaught Error: Class 'mysqli' not found in C:\myProject\ class.Database.php on line 24

拡張機能を有効にするには、php.iniを開き(最初にphp.ini-developmentをphp.iniとしてコピーする必要がある場合があります)、次の2行のコメントを外します(または追加します)。

extension_dir = "ext"

そして、あなたが致命的なエラーを得ている特定の拡張機能、すなわちmysqliの場合:

extension=mysqli




0

dockerを使用している人のために、私はこの問題に遭遇し、php:fpmイメージの代わりに自分のDockerfileを使用して解決しました。

FROM php:fpm

RUN docker-php-ext-install mysqli

0

長い分析手順の結果、この問題の解決策が見つかりました。コマンドライン機能を使用してphpのインストールを適切にテストした後、phpが適切に機能していて、mysqlデータベースで機能することがわかりました。ところで コマンドphp -f filename.phpを使用して、phpコードでコードファイルを実行できます
。そのため、Apacheに問題があることに気付きました。
内部にphpinfo()関数のみを含むファイルを作成しました。
ここで、
Loaded Configuration Fileの行に
私の設定ファイルが読み込まれず、代わりに(none)と記述されていることがわかりました。

最後に、Apache構成内にエントリが見つかりました

<IfModule php5_module>
    PHPINIDir "C:/xampp/php"
</IfModule>

しかし、私はPHP 7をインストールしたので、Apacheはphp.iniファイルを読み込むことができませんでした。追加した

<IfModule php7_module>
    PHPINIDir "C:/xampp/php"
</IfModule>

再起動後、Apacheはすべて正常に動作します。

上記のコードブロックは、httpd-xampp.confファイルで見つかりました。それはあなたの構成のどこかにあるかもしれません。
同じファイルで、php 5バージョンの代わりにphp 7の設定の前に変更しました。

#
# PHP-Module setup
#
#LoadFile "C:/xampp/php/php5ts.dll"
#LoadModule php5_module "C:/xampp/php/php5apache2_4.dll"
LoadFile "C:/xampp/php/php7ts.dll"
LoadModule php7_module "C:/xampp/php/php7apache2_4.dll"

ご覧のとおり、xamppパッケージがインストールされていますが、この問題はApache側にありました。



0

私はxamppを使用していますが、名前を変更すると問題が解決しました。

extension_dir = "ext"

extension_dir = "C:\xampp\php\ext"

PS:この変更を行った後は、Apacheを再起動することを忘れないでください!


-1
<?php  /* If the error is due to calling mysqli in a class */

    class dbconnect extends mysqli{

        private $host = 'localhost';
        private $user = 'root';
        private $pass = '';
        private $db = 'test';

        public function __construct() {
            parent::__construct($this->host, $this->user, $this->pass, $this->db);

            if (mysqli_connect_error()) {
                die('Connect Error (' . mysqli_connect_errno() . ') ' .
                    mysqli_connect_error());
            }
        }
    }
?>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.