Флаттер: не работает подключение к mysql серверу - PullRequest
0 голосов
/ 07 февраля 2020

Я пытаюсь соединить флаттер с базой данных mysql для операций sql crud, но она не работает. Это ошибка, которую я получаю SocketException: OS Error: Connection refused, errno = 111, address = 127.0.0.1, port = 45896

Это мой код для запроса API

import 'package:http/http.dart' as http;
import 'dart:async';

class Services{
  static const ROOT = 'http://127.0.0.1/practice/service.php';
  static const _CREATE_TABLE_ACTION = 'CREATE_TABLE';
  static const _ADD_EMP_ACTION = 'ADD_EMP';


//method to create table employees
static Future<String> createTable() async{
  try{
    //add parameters to pass to the request
    var map = Map<String, dynamic>();
    map['action'] = _CREATE_TABLE_ACTION;
    final response = await http.post(ROOT,body:map);
    print(response.body);
    //print('CREATE TABLE RESPONSE: ${response.body}');
    return response.body;
  }
  catch (e){
      print(e);
    return "error";
  }
}


//method to add an employee to database
static Future<String> addEmployee(String firstName, String lastName) async{
  try{
    //add parameters to pass to the request
    var map = Map<String, dynamic>();
    map['action'] = _ADD_EMP_ACTION;
    map['first_name'] = firstName;
    map['last_name'] = lastName;
    final response = await http.post(ROOT,body:map);
    print('Insert response: ${response.body}');
    if(200 == response.statusCode){
      return response.body;
    }
    else{
      return "error";
    }
  }
  catch (e){
    print(e);
    return "error";
  }
}
}

Это функция, вызывающая код для создания таблицы

  _createTable(){
    _showProgress("Creating Table");
    Services.createTable().then((result){
      if('success' == result){
        //show a snackbar
        _showSnackBar(context,result);
        print("table created");
      }
      else{
        print("table not created");
      }
    });
  }

И это код вызова функции для добавления сотрудника в базу данных

  _addEmployee(){
    if(_firstNameController.text.isEmpty || _lastNameController.text.isEmpty){
      print("Empty fields");
      return;
    }
    _showProgress("Adding Employee..");
    Services.addEmployee(_firstNameController.text, _lastNameController.text).then((result){
      if('success' == result){
        //
        print("success");
      }
      else{
        print("error");
      }
      _clearValues();
    });
  }

А это файл php, который содержит весь ответ на запрос, полученный от API и выполнение запрошенного грубые операции

<?php

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test";
$table = "employee";

//we will get actions from the app to do operations in the database...
$action = $_POST['action'];

$conn = mysqli_connect($servername,$username,$password,$dbname);    
if(!$conn){
    //die("Connection Failed: ");
}
if(!mysqli_select_db($conn,"practice")){
   //echo "db not selected";
}

if("CREATE_TABLE" == $action){
    $sql = "CREATE TABLE IF NOT EXISTS ".$table."(
        id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
        first_name VARCHAR(30) NOT NULL,
        last_name VARCHAR(30) NOT NULL
    )";
    if(mysqli_query($conn,$sql)){
        //echo "success";
    }
    else{
        //echo "failed";
    }
    mysqli_close($conn);
    return;
}


//add an employee
if("ADD_EMP" == $action){
    $first_name = $_POST['first_name'];
    $last_name = $_POST['last_name'];
    $sql = "INSERT INTO $table (first_name, last_name) VALUES ('$first_name','$last_name')";
    $result = mysqli_query($conn,$sql);
    //echo "success";
    mysqli_close($conn);
}


?>

1 Ответ

1 голос
/ 07 февраля 2020
static const ROOT = 'http://127.0.0.1/practice/service.php';

127.0.0.1 - это IP-адрес эмулятора или самого устройства, который является обратным адресом l oop. фактический ip должен быть другим

...