47537


開発初心者でございまして分かりにくい点があるかと存じますが、ご了承くださいませ。  
「Objective-C」にて「AFNetworking3.0」のライブラリを活用して、サーバー上（MAMP)  
にデータの送信を試みているのですが、MAMPのPHPエラーログに以下のようなエラーが発生致しております。「PostgreSQL」の経験が浅く、コードに不備があると思われますが、色々試しましたが、自力での解決ができませんでした。お分かりになる方、ご教授頂けますと幸いで御座います。宜しくお願い致します。

> ■エラー内容  
>  [15-Aug-2018 06:54:52 UTC] PHP Warning: pg_connect(): Unable to connect to
> PostgreSQL server: invalid port number: "jiptsinfra016" in
> /Applications/MAMP/htdocs/DatabaseClass.php on line 34
>
> ３４行目のコードは以下ございます。(Databaseclass.php)
>
> 30行目 $this->link=pg_connect($this->dbServer,  
>  31行目 $this->dbUser,  
>  32行目 $this->dbPass,  
>  33行目 $this->link,  
>  34行目 $this->dbName  
>  35行目 )

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

[code]

      //内部文字コードを変更
      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 __construct($db_name)
         {
            //DBの情報
            $this->dbServer="localhost";
            $this->dbName=$db_name;
            $this->dbUser="root";
            $this->dbPass="root";
    
            //ポスグレに接続
            $this->link=pg_connect($this->dbServer,
                                      $this->dbUser,
                                      $this->dbPass,
                                      $this->link,
                                      $this->dbName
                                      )
                   or
                   die(exit);
    
    
            //UTF-8の文字コードに変更
            $this->query=pg_query($this->link,'SET NAMES utf8');
         }
    
         //DBを閉じる
         public function close()
         {
            return pg_close($this->link);
         }
    
         //読み込むテーブルの選択
         public function select($query)
         {
            $result=pg_query($query);
            $row=array();
            $row=pg_fetch_assoc($result);
            return $row;
         }
    
         //指定したクエリの実行
         public function query($query)
         {
             return pg_query($this->link,$query);
         }
    
         //JSON形式に変換用の出力
         public function jsonparse($query)
         {
            $row = pg_fetch_object($query);
            return $row;
         }
      }
      ?>
    
[/code]

■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 = pg_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]

■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/5.6.30  
>  PostgreSQL 10.5


CC BY-SA 4.0
2018-08-15T07:33:25.117
47536
2018-08-15T07:53:43.063
2018-08-15T07:40:40.903
29466
29466
question
php objective-c postgresql
iOSアプリからPostgreSQLを使いmampにデータを送信した際のPHPエラーの件


エラーの発生している行数で利用している関数  
`pg_connect`のPHPのリファレンスご確認ください。  
<http://php.net/manual/ja/function.pg-connect.php>

コネクションの書き方は基本的に文字列で渡す必要があります

[code]

    $this->link=pg_connect("host={$this->dbServer} dbname={$this->dbName} user={$this->dbUser} password={$this->dbPass}");
    
[/code]

また、引数で渡すやり方は非推奨になっているのでご注意ください。

> 複数のパラメータをサポートする古い構文 $conn = pg_connect("host", "port", "options",  
>  "tty", "dbname") は推奨されません。

おそらく古いPHPで利用していたクラスから持ってきているかと思いますが、  
まずは最新のリファレンスを確認していただき、関数やパラメータの使い方があっているかご確認したほうが良いかと思います。


CC BY-SA 4.0
2018-08-15T07:53:43.063
47537
2018-08-15T07:53:43.063
22665
47536
answer