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

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

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

mysqli

MySQLiはPHP5より導入されているデータベース用のドライバです。MySQL 4.1.3以降の新しい機能の利点をまとめています。

PHP

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

Q&A

2回答

3435閲覧

php7移行でMysqlからデータが取れません。

kojimak

総合スコア10

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

mysqli

MySQLiはPHP5より導入されているデータベース用のドライバです。MySQL 4.1.3以降の新しい機能の利点をまとめています。

PHP

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

0グッド

1クリップ

投稿2019/02/05 03:41

編集2019/02/14 09:32

前提・実現したいこと

素人です。すみませんが助けてください。php5.6からphp7に対応しようと思っています。
php5.6の状態でプログラムを書き換えてテストしています。
mysqlをmysqliに書き換えましたが、画面が真っ白になってしまいます。
思い当たる二つのプログラム(a.phpとb.php)のmysqlをmysqliに変更しました。
以下のようにエラーがあるとこがわかりました。
Warning: mysqli_query() expects at least 2 parameters, 1 given in C:\xampp\htdocs\html\functioni.php on line 227
Warning: mysqli_query() expects at least 2 parameters, 1 given in C:\xampp\htdocs\html\functioni.php on line 231
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given in C:\xampp\htdocs\html\functioni.php on line 241
現在は、c.phpでWarning: Invalid argument supplied for foreach() in C:\xampp\htdocs\html\output\schedule.php on line 50
50行目はforeach($ary_imm as $key => $value){?>
となっています。
正常動作するコードは、

PHP

1//////////////// 一つ目 //////////////////////// 2a.php 3function get_sql_data($sql,$charset = "SJIS",$flag = 0){ 4 //文字セットSQLを実行 5 mysql_query("SET NAMES ".CHARDB); //SJIS対応 6 7 //SQLを実行 8 $sql = mb_convert_encoding($sql,CHARDB,CHAR2); 9 $rs = mysql_query($sql); 10 11 //データを返す 12 if($flag == 1){ 13 //レコード数取得 14 $rwcnt = mysql_num_rows($rs); 15 return $rwcnt; 16 } else { 17 //レコードをリスト化 18 $ary = array(); 19 while($row = mysql_fetch_array($rs)){ 20 array_push($ary,$row); 21 } 22 23 mb_convert_variables(CHAR2 , CHARDB , $ary); 24 return $ary; 25 } 26 27 //データを開放 28 mysql_free_result($rs); 29} 30//////////////// 二つ目 //////////////////////// 31b.php 32<?php 33if (empty($dbHandle)) { 34 35 if($_SERVER['SERVER_NAME']=="www.***.co.jp" or $_SERVER['SERVER_NAME']=="***.co.jp"){ 36 $mysqlHst = "****.ne.jp";//UTF8 DB 37 $mysqlUsr = "+++++"; 38 $mysqlPsw = "-----"; 39 $mysqlDB = "*****"; 40 }elseif($_SERVER['SERVER_NAME']=="www.***.jp" or $_SERVER['SERVER_NAME']=="***.jp"){ 41 $mysqlHst = "****.ne.jp";//UTF8 DB 42 $mysqlUsr = "+++++"; 43 $mysqlPsw = "-----"; 44 $mysqlDB = "*****"; 45 }elseif($_SERVER['SERVER_NAME']=="***.jp"){ 46 $mysqlHst = "****.ne.jp";//UTF8 DB 47 $mysqlUsr = "+++++"; 48 $mysqlPsw = "-----"; 49 $mysqlDB = "est-ouest"; 50 }else{ 51 $mysqlHst = "localhost";//UTF8 DB 52 $mysqlUsr = "root"; 53 $mysqlPsw = "-----"; 54 $mysqlDB = "*****"; 55 } 56 57 $dbHandle = @mysql_connect($mysqlHst, $mysqlUsr, $mysqlPsw); //MySQL接続 58 if ($dbHandle == False) { 59 print("SQL Server connection error\n"); 60 exit; 61 } 62 63 if(!mysql_select_db($mysqlDB, $dbHandle)) { //データベース接続 64 print("Database connection error\n"); 65 exit; 66 } 67} 68?>

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

エラーは、Fatal error: Call to undefined function get_sql_data() in C:\xampp\htdocs\html\output\c.php on line 30
30行目は、$ary_imm = get_sql_data($sql);

php

1エラーの出たc.phpの一部 2<?php 3intval($year); 4$year1 = $year+1; 5$year2 = $year; 6//************************************************************************************** 7// ■ Loading MySQL 8//************************************************************************************** 9include("a.phpとb.php.php"); 10if($year != 2019){ 11$sql = "SELECT * FROM auctionresults WHERE start > '".$year2."' and start < '".$year1."' "; 12}else{ 13$sql = "SELECT * FROM auctionresults WHERE start >= '".$year."' "; 14} 15$sql .= "ORDER BY start DESC "; 16$ary_imm = get_sql_data($sql); 17@mysqli_close($db); 18//************************************************************************************** 19 20function compareDate($year1, $month1, $day1, $year2, $month2, $day2) { 21 $dt1 = mktime(0, 0, 0, $month1, $day1, $year1); 22 $dt2 = mktime(0, 0, 0, $month2, $day2, $year2); 23 $diff = $dt1 - $dt2; 24 $diffDay = ceil($diff / 86400);//1日は86400秒 25 return $diffDay; 26} 27 28foreach($ary_imm as $key => $value){?> 29<section class="schedule" <?php if($key%2 == 0){ print "style='background-color:#fafafa;'"; }?>> 30<?php 31$filename = 'images/books/cover'.$ary_imm[$key]["id"].'.jpg'; 32if(file_exists($filename)){ $bookscover = $ary_imm[$key]["id"]; }else{ $bookscover = "noimage"; } 33?> 34<img src="images/books/cover<?php print $bookscover;?>.jpg" alt="cover" style="float:left;width:115px; height:150px; margin-right:20px; border:1px solid #ccc;"/> 35

該当のソースコード

php

1function get_sql_data($sql,$charset = "SJIS",$flag = 0){ 2 //文字セットSQLを実行 3 mysqli_query(CHARDB."SET NAMES "); //SJIS対応 4 5 //SQLを実行 6 $sql = mb_convert_encoding($sql,CHARDB,CHAR2); 7 $rs = mysqli_query($sql); 8 9 //データを返す 10 if($flag == 1){ 11 //レコード数取得 12 $rwcnt = mysqli_num_rows($rs); 13 return $rwcnt; 14 } else { 15 //レコードをリスト化 16 $ary = array(); 17 while($row = mysqli_fetch_array($rs)){ 18 array_push($ary,$row); 19 } 20 21 mb_convert_variables(CHAR2 , CHARDB , $ary); 22 return $ary; 23 } 24 25 //データを開放 26 mysqli_free_result($rs); 27} 28////////// これより二つ目 ////////////////////////////// 29<?php 30if (empty($dbHandle)) { 31 32 if($_SERVER['SERVER_NAME']=="www.****.co.jp" or $_SERVER['SERVER_NAME']=="****.co.jp"){ 33 $mysqlHst = "*****.ne.jp";//UTF8 DB 34 $mysqlUsr = "******"; 35 $mysqlPsw = "******"; 36 $mysqlDB = "******"; 37 }elseif($_SERVER['SERVER_NAME']=="www.****.jp" or $_SERVER['SERVER_NAME']=="****.jp"){ 38 $mysqlHst = "*****.ne.jp";//UTF8 DB 39 $mysqlUsr = "******"; 40 $mysqlPsw = "******"; 41 $mysqlDB = "******"; 42 }elseif($_SERVER['SERVER_NAME']=="*****.ne.jp"){ 43 $mysqlHst = "******.ne.jp";//UTF8 DB 44 $mysqlUsr = "******"; 45 $mysqlPsw = "******"; 46 $mysqlDB = "******"; 47 }else{ 48 $mysqlHst = "localhost";//UTF8 DB 49 $mysqlUsr = "root"; 50 $mysqlPsw = "******"; 51 $mysqlDB = "******"; 52 } 53 54 $dbHandle = mysqli_connect($mysqlHst, $mysqlUsr, $mysqlPsw, $mysqlDB); //MySQL接続 55 56 if (mysqli_connect_errno()) { 57 printf("Connect failed: %s\n", mysqli_connect_error()); 58 exit(); 59 } 60 61 *1 if ($result = mysqli_query($dbHandle, "SELECT DATABASE()")) { 62 $row = mysqli_fetch_row($result); 63 printf("Default database is %s.\n", $row[0]); 64 mysqli_free_result($result); 65 } 66 67 mysqli_select_db($dbHandle,"*****") ; 68 69 *1 if ($result = mysqli_query($dbHandle, "SELECT DATABASE()")) { 70 $row = mysqli_fetch_row($result); 71 printf("Default database is %s.\n", $row[0]); 72 mysqli_free_result($result); 73 } 74} 75

試したこと

上記*1のように結果を表示してみたところ画面にはDefault database is ******. Default database is *****. と表示しているのでデータベースにはアクセスできていると思っています。
実際には
1は不要なので削除しています。

教えていただいたサンプルコードを基にa.phpを変更しました。当初のエラーは出なくなりましたが別のc.php(実際に抽出して画面表示するプログラム)でエラーを表示しました。
Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\html\output\schedule.php on line 50
50行目は、foreach($ary_imm as $key => $value){?>

PHP

1a.php 2function get_sql_data($sql,$charset = "SJIS",$flag = 0){ 3$link = mysqli_connect("localhost", "root", "estouest"); 4 5if(mysqli_connect_errno() > 0){ 6 7 die("接続失敗" . mysqli_connect_error()); 8 9} 10$db = mysqli_select_db($link, "est-ouest"); 11 12if (!$db){ 13 14 die("データベースの選択失敗" . mysqli_error()); 15 16} 17 mysqli_set_charset($link,"utf8"); 18 19$sql = mb_convert_encoding($sql,CHARDB,CHAR2); 20 $result = mysqli_query($link, "SELECT* FROM news"); 21if (!$result) { 22 die("クエリーが失敗" . mysqli_error()); 23} 24 $ary = array(); 25 while($row = mysqli_fetch_assoc($result)){ 26 array_push($ary,$row); 27 } 28 29 30 31 // MySQLの切断 32 33mysqli_free_result($result); 34} 35 36 37 38

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

m.ts10806

2019/02/05 04:06

コードはマークダウンのcode機能を利用してご提示ください(質問は編集できます)
m.ts10806

2019/02/05 07:26

コメント2つ目の対応でエラーを確認願います。 「真っ白」とはコード実行の継続に差し支えのあるエラーが出て中断しているだけ、ということがほとんどなので、エラー表示すれば前に進むことがよくあります。 要は「どこで止まってるか」の確認が必要です。
m.ts10806

2019/02/05 07:34

コード編集は結構なのですが、現在の提示の仕方だと質問者さんの実際のコードと違いますし構文エラーにもなりますので、 例えば下記のようにコメントで追記してください。 $rs = mysqli_query($sql); //{実際に表示されたエラーメッセージを書く}
kojimak

2019/02/05 07:34

エラー個所は_**で示したところのようですが、直し方に苦戦しています。
m.ts10806

2019/02/05 07:34

というかエラーメッセージをそのままコピペで別途マークダウンのcode機能で提示いただければそれで良いのですが・・
m.ts10806

2019/02/05 07:36

あと何度もすみませんが、 get_sql_data()という関数が呼ばれているのはどこからでしょうか。
kojimak

2019/02/05 07:54

エラー個所は mysqli_query(CHARDB."SET NAMES "); $rs = mysqli_query($sql); while($row = mysqli_fetch_array($rs)){ array_push($ary,$row); } です。
m.ts10806

2019/02/05 07:56

エラー箇所はエラーメッセージに .php line XXと含まれますのでそのままエラーメッセージを追記していただければ良いです。 ※ただ、回答はしました。この問題だけを解決するのは簡単ですが、「移行」としたときにはこれだけで済まない可能性も高いので、よりクリーンな形へ移行するようにしてください。
guest

回答2

0

下記でエラーがでているということで、

php

1mysqli_query(CHARDB."SET NAMES ");

CHARDBという定数がどこでどう定義されているのか提示内容では分からないですが、
既にコメントで提示したようにmysqli_query()の第1引数は手続き型のみ: mysqli_connect() あるいは mysqli_init() が返すリンク IDである必要があります。
つまり上記の書き方では単にSQLをセットしているだけになっています。
他で下記のような形でちゃんとその情報を渡しているので同じようにするだけ

php

1$result = mysqli_query($dbHandle, "SELECT DATABASE()")

2つ目のmysqli_fetch_array()のところに出ているエラーはmysqli_query()が失敗していて返り値がfalseであるがゆえに、mysqli_fetch_array()どころじゃないといった感じですね。

ではありますが、
現在の作りはかなり非効率に思います。
charsetがSJISなのはともかくとして(今の主流は確かutf8mb4)

文字化け対応にSET NAMESを実行するのは推奨されていません。

初心者がやりがちなミス

SET NAMES あるいは SET CHARACTER SET などで文字コードを指定している

確かにmysql→mysqliへの移行をしたいのは分かりますが、
PDOとmysqliはどっちを使うべき?の質問の回答にあるように、移植性が非常に良くなく、質問者さんのように問題を潰したと思ったらまた問題が・・・と問題対応しているだけで疲弊してしまいます。

できれば上記記事にあるようなPDOへの移行を強くすすめます。

サンプルコード:

答えは「1つ目で出ているエラーではmysqli_connect()の結果linkを第1引数に渡していない」
これは何度もコメントしています。
そこを入れればとりあえず1つ進むはず。

けど、せっかくPHP7ですし、無駄な記述も多いのでPHP7っぽい要素を入れて書き換えてみた。
※文字コードはUTF8前提。もし違うならそこは書き加えてください。その場合の動作の保障はしませんのでエラーが出たら自身で追ってみてください。

php

1<?php 2function get_sql_data(String $sql,Bool $record_count = true):array{ 3 $dbh = connect_db(); 4 try{ 5 $rs = mysqli_query($dbh,$sql); 6 7 //データを返す 8 if($record_count){ 9 //レコード数取得 10 return ["count"=>mysqli_num_rows($rs)]; 11 } else { 12 //レコード返却 13 //蛇足コメント:whileでfetchしても結局全行取り出すならmysqli_fetch_allで第2引数オプション指定するだけでいい 14 return mysqli_fetch_all($rs,MYSQLI_ASSOC); 15 } 16 17 }catch(mysqli_sql_exception $e){ 18 var_dump($e); 19 die(); 20 } 21 //dbの解放は余程でかい処理をする以外は自動でされるのでなくてもいいと思う。 22} 23 24function connect_db(){ 25 try{ 26 //蛇足コメント:元のコードではSERVER_NAMEとかで分岐させているけどかなり古いやり方。 27 //それなら設定ファイルを別にもってそこから読み出すようにした方がいい。定数定義のファイルとか。「環境毎に変わらない情報」なので。コードを何度も書き換えることになるのでメンテナンス性が悪い 28 $dbh = mysqli_connect("***", "***", "***", "***"); //MySQL接続 29 30 //蛇足コメント:SET NAMESは基本使わない。それならmysqli()クラスでnewしてset_charset()した方が自然 31 /* 例:PHPマニュアルより引用 32 $mysqli = new mysqli("***", "***", "***", "***"); 33 $mysqli->set_charset('utf8'); 34 */ 35 if (mysqli_connect_errno()) { 36 printf("Connect failed: %s\n", mysqli_connect_error()); 37 die(); 38 } 39 //蛇足コメント:これで捕捉できるかは未確認。でもtry-catchは必須。PDOExceptionのほうが正直扱いやすい 40 }catch(mysqli_sql_exception $e){ 41 var_dump($e); 42 die(); 43 } 44 return $dbh; 45} 46 47var_dump(get_sql_data($sql,false)); 48

蛇足コメントも読んでください。

蛇足コード

ちなみにPDO版。結果は同じ。

php

1<?php 2function get_sql_data(String $sql,Bool $record_count = true):array{ 3 $dbh = connect_db(); 4 5 try{ 6 $stmt = $dbh->query($sql); 7 8 //データを返す 9 if($record_count){ 10 //レコード数取得 11 return ["count"=>$stmt->rowCount()]; 12 } else { 13 //レコード返却 14 return $stmt->fetchAll(); 15 } 16 17 }catch(PDOException $e){ 18 var_dump($e); 19 die(); 20 } 21} 22 23function connect_db(){ 24 try{ 25 return new PDO("mysql:dbname=***;host=***;charset=utf8mb4" 26 ,"***" 27 ,"***", 28 [ 29 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 30 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 31 ] 32 ); 33 } catch (PDOException $e) { 34 var_dump($e); 35 die(); 36 } 37} 38 39var_dump(get_sql_data($sql,false));

mysqli版でもpdo版でもですが、本来はSQLには色々あって、
例えばSELECTだとwhere句がついてきたりします。
その場合だとSQLインジェクションの対策もきちんとやってるか?
というのが大事になります。
prepare→bindValueの流れは必須ですね。
今回はそこまで求められていないので書いていませんが。


あと、この記事は読んでいただきたい。

投稿2019/02/05 07:52

編集2019/02/06 03:14
m.ts10806

総合スコア80850

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

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

kojimak

2019/02/05 09:09

pdoに変えていきたいのですが、技術が無いのでまずはmysqliに移行と考えたのです。SET NAMESも使わずmysql_set_charsetに変えようとしたのですが、いずれにせよ無理みたいです。エラーが消えません。
m.ts10806

2019/02/05 09:25

別途コメントでお願いしていますが、エラーをそのまま質問本文に追記してください。 pdoよりもmysqliへの移行の方が技術が必要ですよ。私ですらお断りしたいくらいです。やることが多すぎます。
m.ts10806

2019/02/05 09:31

あと、現在のコードですね。 当初より変わってますよね。 正しく再現確認できるコードを提示されないとこちらもアドバイスができません。
kojimak

2019/02/05 09:54

質問文を直しました。 よろしくお願いいたします。
m.ts10806

2019/02/05 10:18

あれ?mysqli_queryの第一引数やSET NAMES直されたのではないのですか?
kojimak

2019/02/06 01:22

マニュアルのように入れてみてもエラーが消えないのでそのままにしてあります。
m.ts10806

2019/02/06 01:26

それでは話が合わなくなってきます。 エラーの内容を確認してください。そのままにしているということは全く進んでいないということです。 マニュアルのように入れてエラーがでたということは少し進んだということです。 進んで戻っていては全く進歩がないですよ。 どのように入れたかわからないとこちらもアドバイスしようがありません。
m.ts10806

2019/02/06 01:28 編集

「マニュアルを参考にしたらエラーが消えるよ」という話ではなく、 あくまで「プログラムの仕様(マニュアル)通りに組むのが前提」という話です。 そこでエラーがでたということは仕様に近づいてはいるけど、何かしら入れる情報がおかしいとか構文が間違っているとか、整合性がとれていないとか そのあたりになるわけですが、今の何も進んでいない状態より100倍マシです。 エラーは問題解決のヒントです。それを嫌がっていては何もできあがりません。
m.ts10806

2019/02/06 01:34

質問に提示されているエラーは「引数が最低2つ必須だが1つしか与えられていない」です。 マニュアル参考に組んだのでしたら2つ目の引数を与えたのでしょうけどそれがマニュアルの通りかどうかというのが一点目ですね。 というか、回答に書いてます。質問者さんのコードでは別の箇所できちんと正しく引数を与えています。 まずは同じようにするだけですよ?
m.ts10806

2019/02/06 01:57 編集

ところで 実際のDBはSJISなんですが?あとプログラム自体の文字コードは? 無駄なエンコーディングが沢山走っているような気がしてなりません。 SQL文に対するエンコーディングは正直意味がないように思いますし。 get_sql_data() に渡されてる$charset どこにも使われてませんし。
m.ts10806

2019/02/06 02:44

勝手に憶測でサンプルコード作りました。 pdo版も提示してあります。 わからないことはPHPマニュアル読んでください。 というか一通り理解してから作らないとセキュリティリスクたんまり作りこんだ大事故コードになるので(そこから出る損失は計り知れない) 私が回答に提示した「PHPでデータベースに接続するときのまとめ」の記事などはきちんと読んで理解を進めてください。 素人であろうと初心者であろうと上級者であろうと何であろうとプログラムは書いた通りにしか動かないので、もしそのコードにセキュリティリスクがあれば容赦なく侵されます。
guest

0

今出ているエラーはこいつですか?これが起きる原因は3パターン考えられます。
ちなみに起きる原因は、「定義されていない関数が呼び出されている」というものです。

Fatal error: Call to undefined function get_sql_data() in C:\xampp\htdocs\html\output\c.php on line 30

たしかにget_sql_data()は30行目に記述されていますが、その呼び出し先を確認してください。

ケース1:関数の名前が違っている

function get_sql_bata(){…} とかなっている場合です。

ケース2:外部ファイルに置かれている場合で、それを呼び出す手段が記述されていない

問題のプログラムを見ると、二種類PHPファイルがあるようですが、それを
require_once(外部ファイル.php);で呼びに行くようにしていますか?

PHPはあくまで問い合わせ型の言語であり、個々のサーバーに対して各ファイルが独立しているのでそのファイルの外に関数が置かれている場合、require_once()やinclude_once()などでそのファイルを呼び出さないといけません。

ケース3:サーバールートの外側に置かれているファイルを参照しようとしている

PHPプログラムはサーバのどこに置かれても参照できるものではなく、サーバールート配下でないとPHPを動かすことができません。よくあるミスとしてサーバコンフィグファイル(xxx.conf)のサーバールート設定がhtmlになっているのに、参照しようとしているPHPファイルが同じ階層、あるいは上位に置かれている場合はPHPプログラムを実行することができず、ただの文字列が書かれたテキストファイルとして読み取ってしまいます。

投稿2019/02/14 06:42

編集2019/02/14 09:03
FKM

総合スコア3635

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

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

kojimak

2019/02/14 08:01

ありがとうございます。include("a.phpとb.php.php");してます。require_onceに変えましたが同じエラーでした。元のa.phpファイルには$sql=の文があるのですが関係しているのでしょうか。
FKM

2019/02/14 08:13 編集

require_once('a.php')という風に文字列にしていますか?あと、ファイルのパス(要はファイルが置かれている場所)が合っていますか? あとinclude_once()にすると、呼び出せなかった場合でも普通にエラーを吐かずに通ってしまうので、最初のうちはrequire_once()を使うように心がけた方がいいです。
kojimak

2019/02/14 08:13

include("readdata.php");となっていて、readdata.phpの中がinclude_once("a.php"); include_once("b.php");となっています。
FKM

2019/02/14 08:17

c.phpからはget_sql_data()が記述されているファイルへのアクセスはきちんとできていますか?
kojimak

2019/02/14 08:30

c。phpは変更していないのでアクセスできていると思っています。
FKM

2019/02/14 08:34

だとすると、その関数名が本当に同じか確認してみてください。それか呼び出す方の関数名を定義されている関数名に上書きしてみてください。それで通れば、何かしら全角文字などが混じっていた可能性が高いです。
FKM

2019/02/14 08:38

あと、もう一つ考えられるケースとしてはサーバーの外側に置かれている場合です。php.iniのserverrootはだいたいhtml配下、あるいはhtdocs配下になっていますが、それより上に置かれたファイルはそもそもPHPで呼び出すことができないので、上記のエラーが起きます。
kojimak

2019/02/14 08:41

ありがとうございます。確認します。
kojimak

2019/02/14 09:34

試したことに示したようにa.phpを変更しました。 Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\html\output\schedule.php on line 50 今度は50行目、foreach($ary_imm as $key => $value){?> です。
FKM

2019/02/14 10:05 編集

一旦は、この質問に対する問題はクリアできていますね。そこは別の部分のエラーになります。 invalid argument supplied for foreach というのは foreach文においてsupply for(渡して)いるinvalid(不正な) argument(引数)、つまり引数に置いている変数に間違いがあるということです。 よくあるパターンとしては配列変数を置くべき場所に通常の変数を置いていた、または$ary_immの宣言を別の場面で、配列以外で宣言済みだった、などが考えられます。 この辺は少し調べたらすぐ出てくるので、都度都度エラーを追っていけば、だいたい糸口は見えるようになります。自分もあと少ししかお相手できないので、後は自力で頑張ってみてください。 そもそも、Mysql5.6の時点でしっかりと動いていたプログラムかどうかも気になるところではあるのですが…。
kojimak

2019/02/18 01:48

お世話になります。 現状は問題なく、こちらの要求通りの表示になっていますが、エラーを表示させてないのでエラー表示させたら?です。
FKM

2019/02/19 05:25

問題は解決ということですか?
kojimak

2019/02/23 02:50

別の仕事のため離れていました。まだ解決していません。兆しも見えない。。。
FKM

2019/02/23 03:22

まずは本当にPHP5.6で動いていたプログラムなのか確認してみることです。バックアップとって戻せるなら元に戻してください。その上で関数部分だけをPHP7のときのものに差し替えてください
kojimak

2019/02/23 04:56

ありがとうございます。参考になります。おっしゃるようにちょうどやり直してみたところです。エラーは出なくなりましたが、抽出条件の設定に影響が出たようで、全件抽出表示してしまっています。
FKM

2019/02/23 05:11

そこは別の質問で投げた方がいいですね。これ以上投げると本題からかなり逸脱してしまいますし。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問