質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

2回答

2619閲覧

fetch_all()エラーになってしまいます。

hinadanya

総合スコア1

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2020/05/26 12:55

編集2020/05/26 18:07

前提・実現したいこと

phpで掲示板のシステムを作っています。

発生している問題・エラーメッセージ

ブラウザからサーバーにアップロードしたindex.phpにアクセスするとこのエラーメッセージが出てきました。

エラーメッセージ Fatal error: Uncaught Error: Call to undefined method mysqli_result::fetch_all() in /home/n✳︎✳︎✳︎/n✳︎✳︎✳︎.php.xdomain.jp/public_html/index.php:97 Stack trace: #0 {main} thrown in /home/n✳︎✳︎✳︎/n✳︎✳︎✳︎.php.xdomain.jp/public_html/index.php on line 97

該当のソースコード

php

1// 接続エラーの確認 2if( $mysqli->connect_errno ) { 3 $error_message[] = 'データの読み込みに失敗しました。 エラー番号 '.$mysqli->connect_errno.' : '.$mysqli->connect_error; 4} else { 5 6 $sql = "SELECT view_name,message,post_date FROM message ORDER BY post_date DESC"; 7 $res = $mysqli->query($sql); 8 9 if( $res ) { 10 $message_array = $res->fetch_all(MYSQLI_ASSOC); 11 } 12 13 $mysqli->close(); 14}

試したこと

if以降の部分をwhileなども試してみたのですがやはりエラーになりました。

システムやバージョン

使っているサーバーはxfreeのレンタルサーバーです。
phpMyAdminはそこにすでにインストールされているものを使っています。
phpinfoの結果:PHPバージョンは7.3.11 でした。
使っているパソコンは
MacBook Airでバージョンは10.15.4 でした。
レンタルサーバー側のPHPバージョンはPHP7.1.x でした。
サーバー情報
Mac上のmysqliの情報
mysqli情報
Mac上のmysqlndの情報
mysqlnd情報

###補足
データベースの写真
データベースにこのようなエラーが出ていたのですがこれは関係ありますか?

<補足2>
index.phpがあるサーバー上にphpinfo.phpをアップロードしてアクセスしたら以下のエラーが出ました。

message

1Warning: phpinfo() has been disabled for security reasons in /home/nア✳︎✳︎✳︎/n✳︎✳︎✳︎.php.xdomain.jp/public_html/phpinfo.php on line 2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takasima20

2020/05/26 13:09

SQLエラーは出てないスか?
hinadanya

2020/05/26 15:52

それはどこから確認できますか?
takasima20

2020/05/26 16:26

phpMyAdminで直接(phpコードで記述している) SQLを実行してエラーは出ませんか? 要するにフィールド名などのスペルミスを心配しています。
tanat

2020/05/26 16:29

追記されているphpinfoの結果はサーバ側のphpinfoの結果ですか?
tanat

2020/05/26 17:46

Mac上でのphpinfoであれば(追記を見る限りそうだと思いますが)、却って混乱の元になってしまうので、削除されるかMac上のphpinfoだと明記されることをお勧めします。
hinadanya

2020/05/26 18:06

phpinfoはmac上のphpinfoです。 補足を編集しておきます。
guest

回答2

0

ベストアンサー

回答

エラーとしてはmysqli_result::fetch_all()が使えないという事なので、
ソースコードを修正して
mysqli_result::fetch_assoc
を使う様にすれば解決できます。(参照ページのサンプルコードを読んで試してみてください、)

多分こんな感じだと思います。エラーチェックはしてないので、間違ってるかもしれませんが。

PHP

1 if( $res ) { 2 $message_array = $res->fetch_all(MYSQLI_ASSOC); 3 }

PHP

1 if( $res ) { 2 while ($row = $res->fetch_assoc()) { 3 $message_array[] = $row; 4 } 5 }

原因

xfreeのPHP・MySQLサーバーではmysqlndが存在しない様に見えるので、
ソースコード修正無しではおそらく解決する方法はありません。
使えるPHPのバージョンも古い(セキュリティ上問題が有り得るバージョン)ですし、ちゃんと使いたければ有料のプランを使ってくださいという方針なんだと思います。
(サポートに問い合わせてみてください。)

以下、xfreeのPHP・MySQLサーバーでアカウントを作成して確認してみました。
Mac上でも動くはずなので、双方で動かしてみて違いを確認してみてください。

PHP

1echo "<pre>"; 2//mysqli_resultクラスのメソッド一覧を表示 3var_dump(get_class_methods('mysqli_result')); 4 5//iniの設定値を取得して、mysqlを含んでいる物だけ表示 6foreach(ini_get_all() as $index => $ini){ 7 if(strpos($index,"mysql") !== false){ 8 var_dump($index); 9 var_dump($ini); 10 } 11} 12//読み込んでいるエクステンションを取得して、mysqlを含んでいるものを表示 13foreach(get_loaded_extensions() as $extension){ 14 if(strpos($extension,"mysql") !== false){ 15 var_dump($extension); 16 } 17} 18echo "</pre>"; 19
array(13) { [0]=> string(11) "__construct" [1]=> string(5) "close" [2]=> string(4) "free" [3]=> string(9) "data_seek" [4]=> string(11) "fetch_field" [5]=> string(12) "fetch_fields" [6]=> string(18) "fetch_field_direct" [7]=> string(11) "fetch_array" [8]=> string(11) "fetch_assoc" [9]=> string(12) "fetch_object" [10]=> string(9) "fetch_row" [11]=> string(10) "field_seek" [12]=> string(11) "free_result" } string(25) "mysqli.allow_local_infile" array(3) { ["global_value"]=> string(1) "1" ["local_value"]=> string(1) "1" ["access"]=> int(4) } string(23) "mysqli.allow_persistent" array(3) { ["global_value"]=> string(1) "1" ["local_value"]=> string(1) "1" ["access"]=> int(4) } string(19) "mysqli.default_host" array(3) { ["global_value"]=> NULL ["local_value"]=> NULL ["access"]=> int(7) } string(19) "mysqli.default_port" array(3) { ["global_value"]=> string(4) "3306" ["local_value"]=> string(4) "3306" ["access"]=> int(7) } string(17) "mysqli.default_pw" array(3) { ["global_value"]=> NULL ["local_value"]=> NULL ["access"]=> int(7) } string(21) "mysqli.default_socket" array(3) { ["global_value"]=> NULL ["local_value"]=> NULL ["access"]=> int(7) } string(19) "mysqli.default_user" array(3) { ["global_value"]=> NULL ["local_value"]=> NULL ["access"]=> int(7) } string(16) "mysqli.max_links" array(3) { ["global_value"]=> string(2) "-1" ["local_value"]=> string(2) "-1" ["access"]=> int(4) } string(21) "mysqli.max_persistent" array(3) { ["global_value"]=> string(2) "-1" ["local_value"]=> string(2) "-1" ["access"]=> int(4) } string(16) "mysqli.reconnect" array(3) { ["global_value"]=> string(1) "0" ["local_value"]=> string(1) "0" ["access"]=> int(4) } string(31) "mysqli.rollback_on_cached_plink" array(3) { ["global_value"]=> string(1) "0" ["local_value"]=> string(1) "0" ["access"]=> int(4) } string(24) "pdo_mysql.default_socket" array(3) { ["global_value"]=> string(25) "/var/lib/mysql/mysql.sock" ["local_value"]=> string(25) "/var/lib/mysql/mysql.sock" ["access"]=> int(4) } string(6) "mysqli" string(9) "pdo_mysql"

以下、追記前の回答

可能性としては

  • tdomyさんの回答の通り、mysqlndが有効になっていない

→mysqlndを有効にする

  • PHPのバージョンが5.2以下である

→PHPのバージョンを5.3以上に上げる

のどちらかと思います。


現状はPHPの環境情報が不明なので

  • 回答者が再現できる粒度で、どのOSにどの様にPHPを導入したのかを質問に追記する、レンタルサーバーならサービス名、プラン等出来る限り詳細に記載する
  • <?php phpinfo();だけを記載したPHPファイルをアップロードしてブラウザでアクセスし、mysqlと記載のある部分を質問に追記する

ことでより適切な回答が得られるかと思います。


以下は回答ではありませんが、、、
今から学習するのであれば、よほど明確な目的(使おうとしているアプリケーションがmysqliを使っている、業務で保守しないといけないアプリケーションがmysqliを使っている等)の理由が無い限りはPDOを使用したデータベースアクセスで学習されることを強くお勧めします。

投稿2020/05/26 16:00

編集2020/05/26 17:54
tanat

総合スコア18713

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hinadanya

2020/05/29 03:21

ありがとうございます! 上記の修正をしたところエラーが出なくなりました!
guest

0

MySQL ネイティブドライバ(mysqlnd)は有効になっていますか?
phpinfo()で確認してみてください。

mysqli_result::fetch_all()
https://www.php.net/manual/ja/mysqli-result.fetch-all.php

投稿2020/05/26 13:11

tdomy

総合スコア20

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hinadanya

2020/05/26 15:47

mysqlndは有効になっていました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問