Сервис для подключения приложения Angular 6 к php / mysql db, размещенному на DreamHost - PullRequest
0 голосов
/ 11 мая 2019

Я создал приложение Angular 6 для клиента.В настоящее время клиент размещает базу данных MySQL на Dreamhost.Существует существующая БД, и мне нужно определить, как подключить мое приложение к существующей базе данных для запроса данных.Я знаю, что прямой запрос к БД открывает клиента для внедрения SQL, поэтому мне нужно реализовать службу.Тем не менее, я, прежде всего, разработчик внешнего интерфейса и теряюсь на бэкэнд-сервисе, необходимом для подключения к БД.

Приложение написано на Angular 6 и будет развернуто как на Android, так и на iOS.Посоветуйте, пожалуйста, лучший сервис или учебник для реализации веб-сервиса, который может использоваться приложением, и предоставьте ответ json.В настоящее время приложение получает данные из встроенного файла JSON, который создается по запросу из базы данных и развертывается вместе с приложением.Я пытаюсь установить «живые» обновления между базой данных и приложением

Я создал службу php rest, которую пытаюсь установить на Dreamhost MySQL vps:

Наличие администратора серверасоздайте папку api / на VPS.Внутри будет три папки, по одному в каждой: api / config api / objects api / guest

/ api / config / database.php

<?php
        class Database{

        // specify your own database credentials
        private $host = "localhost";
        private $db_name = "**************";
        private $username = "**************";
        private $password = "**************";
        public $conn;

        // get the database connection
        public function getConnection(){

        $this->conn = null;

        try{
            $this->conn = new PDO("mysql:host=" . $this->host . ";dbname=" 
    . $this->db_name, $this->username, $this->password);
            $this->conn->exec("set names utf8");
        }catch(PDOException $exception){
            echo "Connection error: " . $exception->getMessage();
        }

        return $this->conn;
        }
    }
?>

/ api / objects /guest.php

<?php
    class Guest{

        // database connection and table name
        private $conn;
        private $table_name = "guests";

        // object properties
        public $id;
        public $name;
        public $bio;
        public $image;
        public $type;

        // constructor with $db as database connection
        public function __construct($db){
            $this->conn = $db;
        }
    }
?>

/ api / guest / read.php

<?php
// required header
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");

// include database and object files
include_once '../config/database.php';
include_once '../objects/category.php';

// instantiate database and category object
$database = new Database();
$db = $database->getConnection();

// initialize object
$guest = new Guest($db);

// query categorys
$stmt = $guest->read();
$num = $stmt->rowCount();

// check if more than 0 record found
if($num>0){

    // guest array
    $guest_arr=array();
    $guest_arr["records"]=array();

    // retrieve our table contents
    // fetch() is faster than fetchAll()
    // /2042001/pdo-fetchall-vs-pdo-vyborka-v-tsikle
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
        // extract row
        // this will make $row['name'] to
        // just $name only
        extract($row);

        $guest_item=array(
            "id" => $id,
            "name" => $name,
            "bio" => html_entity_decode($bio),
            "image" => $image,
            "type" => $type
        );

        array_push($guest_arr["records"], $guest_item);
    }

    // set response code - 200 OK
    http_response_code(200);

    // show guests data in json format
    echo json_encode($guest_arr);
} else {

    // set response code - 404 Not found
    http_response_code(404);

    // tell the user no guest was found
    echo json_encode(
        array("message" => "No guests found.")
    );
}

// no guests found will be here
// read guests
function read(){
    // select all query
    $query = "SELECT
    c.name as name, p.id, p.name, p.bio, p.image, p.type
    FROM
    " . $this->table_name . " p
    LEFT JOIN
        categories c
            ON p.id = c.id
    ORDER BY
    p.name DESC";

    // prepare query statement
    $stmt = $this->conn->prepare($query);

    // execute query
    $stmt->execute();

    return $stmt;        
}
?>

Я удалил действительное имя пользователя / пароль / имя_базы из кода для конфиденциальности, но учетную запись пользователя с доступом для выбора и индексированиябыл создан для приложения / services

Текущий сервер - VPS mysql.ServerName.org, поэтому я предполагаю, что после установки этого скрипта в папку с именем api / я могу поместить следующий адрес в свойбраузер и нажмите эту «службу»:

Я настрою sql, так как не уверен, что он будет правильным, но вот первый шаг при превращении базового сценария в PHP Restful service

Для первого прохода мне просто нужно запросить гостевую таблицу на предмет включенной информации.

"https://mysql.ServerName.org/api/guest/read.php"

ок, установили сервис и вот мойтекущий ответ сервера: пожалуйста, введите:

Uncaught Error: Using $this when not in object context in /home/libertycon/libertycon.org/api/guest/read.php:74 Line 74: $stmt = $this->conn->prepare($query);

Мой PHP довольно ужасен, но я не вижу никаких проблем в файле read.php, поэтому я не знаю, почему он не может найти метод, которыйочевидно там ...

1 Ответ

1 голос
/ 12 мая 2019

вам нужно узнать, как работает REST API, вот отправная точка для этого: codeofaninja.com/2017/02/create-simple-rest-api-in-php.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...