前提・実現したいこと
素人です。すみませんが助けてください。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/ツールのバージョンなど)
