iOSアプリからサーバ上のDBにデータを送信した際のPHPエラーの件


開発初心者の質問で分かりにくい点が多々あるかと存じますが、ご了承くださいませ。  
「Objective-C」にて「AFNetworking3.0」のライブラリを活用して、サーバー上（MAMP)  
にデータの送信を試みているのですが、MAMPのPHPエラーログに以下のようなエラーが発生致しております。1週間ほどかけ色々と修正を試みましたが、解消されませんでした。沢山エラーが発生しており、申し訳ございません。お分かりになる方、ご教授頂けますと幸いで御座います。宜しくお願い致します。

> ■エラー内容1  
>  PHP Deprecated: Methods with the same name as their class will not be
> constructors in a future version of PHP; Database has a deprecated
> constructor in /Applications/MAMP/htdocs/DatabaseClass.php on line 10
>
> ■10行目のコードは以下です。  
>  class Database{
>
> ■エラー内容2  
>  PHP Warning:mysqli_select_db() expects parameter 1 to be mysqli, string
> given in /Applications/MAMP/htdocs/DatabaseClass.php on line 37
>
> ■37行目のコードは以下です。  
>  $this->db=mysqli_select_db($this->dbName,$this->link);
>
> ■エラー内容３  
>  PHP Warning: mysqli_query() expects parameter 1 to be mysqli, string given
> in /Applications/MAMP/htdocs/DatabaseClass.php on line 40
>
> ■40行目のコードは以下です。  
>  $this->query=mysqli_query('SET NAMES utf8',$this->link);
>
> ■エラー内容4  
>  PHP Warning: mysqli_query() expects at least 2 parameters, 1 given in
> /Applications/MAMP/htdocs/DatabaseClass.php on line 61
>
> ■61行目のコードは以下です。  
>  return mysqli_query($query);
>
> ■エラー内容5  
>  PHP Warning: mysqli_fetch_object() expects parameter 1 to be mysqli_result,
> null given in /Applications/MAMP/htdocs/send_request.php on line 32
>
> ■32行目のコードは以下です。  
>  while ($row = mysqli_fetch_object($query)) {

■send_request.php（サーバー上にアップしたファイル１）

[code]

     <?php
     //DatabaseClassを読み込み
      include_once "DatabaseClass.php";
    
     //テーブル名と追加する値が選択されているかどうか確認
     if($_POST["table_name"] && $_POST["addtext1"] 
     && $_POST["addtext2"] && $_POST["addtext3"])
     {
     //DB名設定
     $table_name = $_POST["table_name"];
     $addtext1 = $_POST["addtext1"];
     $addtext2 = $_POST["addtext2"];
     $addtext3 = $_POST["addtext3"];
    
     $database = new Database("test");
    
     //データ追加用SQL
     $sql = "INSERT INTO {$table_name} (field_A,field_B,field_C) 
     VALUES ('{$addtext1}','{$addtext2}','{$addtext3}');";
    
     //クエリ送信
     $query = $database->query($sql);
    
     //一応結果を出力用SQL
     $sql = ("SELECT * FROM {$table_name}");
    
     //クエリ送信
     $query = $database->query($sql);
     $json= array();
    
    
     if(strstr($table_name, 'test_json')){
      while ($row = mysqli_fetch_object($query)) {
          $json[] = array(
             'field_A'=> $row->field_A
             ,'field_B'=> $row->field_B
             ,'field_C' => $row->field_C
          );
      }
      }//if(strstr($table_name, 'test_json'))
    
    
     //JSON形式で出力
     header("Content-Type: application/json; charset=utf-8");
     echo json_encode($json);
    
     //DBを閉じる
     $database->close();
    
     }//if($_POST["table_name"])
     ?>
    
[/code]

■Databaseclass.php（サーバー上にアップしたファイル２）

[code]

     <?php
    
    //内部文字コードを変更
    mb_language("uni");
    mb_internal_encoding("utf-8");
    mb_http_input("auto");
    mb_http_output("utf-8");
    
    class Database{
    
     var $dbServer;
     var $dbName;
     var $dbUser;
     var $dbPass;
     var $link;
     var $db;
     var $query;
    
     //DB接続
     function Database($db_name)
     {
      //DBの情報
      $this->dbServer="localhost:8889";
      $this->dbName=$db_name;
      $this->dbUser="root";
      $this->dbPass="XXXX";
    
      //MySQLに接続
      $this->link=mysqli_connect($this->dbServer,
                                $this->dbUser,
                                $this->dbPass)
             or
             die(exit);
    
      //DBを選択
      $this->db=mysqli_select_db($this->dbName,$this->link);
    
      //UTF-8の文字コードに変更
      $this->query=mysqli_query('SET NAMES utf8',$this->link);
     }
    
     //DBを閉じる
      public function close()
      {
      return mysqli_close($this->link);
      }
    
     //読み込むテーブルの選択
     public function select($query)
     {
      $result=mysqli_query($query);
      $row=array();
      $row=mysqli_fetch_assoc($result);
      return $row;
      }
    
      //指定したクエリの実行
      public function query($query)
      {
      return mysqli_query($query);
      }
    
      //JSON形式に変換用の出力
      public function jsonparse($query)
      {
      $row = mysqli_fetch_object($query);
      return $row;
      }
     }
     ?>
    
[/code]

■Objective-C（ビルド実行した内容)

[code]

     - (void)send_request
     {
     AFHTTPSessionManager* manager = [AFHTTPSessionManager manager];
     NSDictionary* postparam = @{ @"table_name" : @"test_json",
                             @"addtext1"   : @"add_A",
                             @"addtext2"   : @"add_B",
                             @"addtext3"   : @"add_C"};
     [manager POST:@"http://localhost:8888/send_request.php"
     parameters:postparam progress:nil
      success:^(NSURLSessionTask* task, id responseObject) {
          //通信成功
          NSLog(@"成功response: %@", responseObject);
      }
      failure:^(NSURLSessionTask* operation, NSError* error) {
          //通信失敗
          NSLog(@"失敗Error: %@", error);
      }];
      }
    
[/code]

> 補足情報  
>  データベース名：test  
>  テーブル名：test_json  
>  フィールド１：field_A  
>  フィールド２：field_B  
>  フィールド３：field_C  
>  Apache/2.4.6 (MSMP)  
>  PHP/7.2.77  
>  MySQL 5.7.21




■エラー内容1  
コンストラクタの書き方が古いと言っています。  
Databaseclass.phpの

[code]

    function Database($db_name)
    {
    
[/code]

を

[code]

    function __construct($db_name)
    {
    
[/code]

に変更するか、Databaseメソッドがコンストラクタでなければ、別の名称を付けてください。  
参考：<http://php.net/manual/ja/language.oop5.decon.php>

■エラー内容2  
引数が逆です。

[code]

    $this->db=mysqli_select_db($this->link,$this->dbName);
    
[/code]

が正しいと思います  
参考：<http://php.net/manual/ja/mysqli.select-db.php>

■エラー内容３  
エラー内容２と同様、引数が逆です。

[code]

    $this->query=mysqli_query($this->link,'SET NAMES utf8');
    
[/code]

が正しいと思います  
参考：<http://php.net/manual/ja/mysqli.query.php>

■エラー内容4  
引数が足りません。  
mysqli_queryは2つの引数が必要です。  
第一引数に必要なDBへの接続ハンドラを指定してください。

[code]

      //指定したクエリの実行
      public function query($query)
      {
          return mysqli_query($query);
      }
    
[/code]

の個所を

[code]

      //指定したクエリの実行
      public function query($query)
      {
          return mysqli_query($this->link,$query);
      }
    
[/code]

としてみてください。  
参考：<http://php.net/manual/ja/mysqli.query.php>

■エラー内容5  
mysqli_fetch_object()の第一引数にmysqli_result形式のオブジェクトを指定してくださいと言っています。  
エラー内容4のエラーを解消すれば治るのではないかと思います。




■エラー内容1  
コンストラクタの書き方が古いと言っています。  
Databaseclass.phpの

[code]

    function Database($db_name)
    {
    
[/code]

を

[code]

    function __construct($db_name)
    {
    
[/code]

に変更するか、Databaseメソッドがコンストラクタでなければ、別の名称を付けてください。  
参考：<http://php.net/manual/ja/language.oop5.decon.php>

■エラー内容2  
引数が逆です。

[code]

    $this->db=mysqli_select_db($this->link,$this->dbName);
    
[/code]

が正しいと思います  
参考：<http://php.net/manual/ja/mysqli.select-db.php>

■エラー内容３  
エラー内容２と同様、引数が逆です。

[code]

    $this->query=mysqli_query($this->link,'SET NAMES utf8');
    
[/code]

が正しいと思います  
参考：<http://php.net/manual/ja/mysqli.query.php>

■エラー内容4  
引数が足りません。  
mysqli_queryは2つの引数が必要です。  
第一引数に必要なDBへの接続ハンドラを指定してください。

[code]

      //指定したクエリの実行
      public function query($query)
      {
          return mysqli_query($query);
      }
    
[/code]

の個所を

[code]

      //指定したクエリの実行
      public function query($query)
      {
          return mysqli_query($this->link,$query);
      }
    
[/code]

としてみてください。  
参考：<http://php.net/manual/ja/mysqli.query.php>

■エラー内容5  
mysqli_fetch_object()の第一引数にmysqli_result形式のオブジェクトを指定してくださいと言っています。  
エラー内容4のエラーを解消すれば治るのではないかと思います。

