发布于 2026-01-06 4 阅读
0

API básica com PHP 和 MySQL via PDO para uma Todo List

API básica com PHP 和 MySQL via PDO para uma Todo List

举例来说,我们可以使用 PHP 或 MySQL 来构建 API 基础,并通过简单的列表扩展 PDO。

前提条件:

  • há um servidor de banco de bados escutando em um host e porta conhecidos (se estiver no seu computador, deverá estar em localhost:3306);
  • nesse banco de bados,há um esquema criado para a sua aplicação;
  • o PHP 安装解释器;
  • pdo_mysql 扩展可用于 PHP;
  • 这是 PHP 和 API 的主题。

配置数据库

Primeiro,vamos criar uma tabela chamada“任务”没有银行作为塔雷法斯。执行一个连续查询 SQL para criar a tabela:

CREATE TABLE tasks (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    completed BOOLEAN NOT NULL DEFAULT 0
);
Enter fullscreen mode Exit fullscreen mode

配置银行连接

潜在的激光雷达和银行可能会在没有系统的情况下建立联系,并与双方建立联系。

为此,我们将在“database.php”中提供有关银行和银行的信息,以供$conn您使用以获取联系信息。 Insira o seguinte código no arquivo:

<?php

$host = 'localhost';
$db = 'nome_do_banco_de_dados';
$port = 3306;
$user = 'nome_do_usuario';
$pass = 'senha_do_usuario';

try {
    $conn = new PDO("mysql:host=$host;port=$port;dbname=$db;charset=utf8", $user, $pass);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
    echo 'Erro na conexão com o banco de dados: ' . $e->getMessage();
    exit;
}
Enter fullscreen mode Exit fullscreen mode

可以使用“nome_do_banco_de_dados”、“nome_do_usuario”和“senha_do_usuario”替代值来代替主机,以便满足需要。

测试连接功能,并执行命令php database.php。 Se nenhum resultado for exibido, então está tudo certo.


创建 API(方法 1)

API 的简单形式是用于 CADA 端点的。

获取任务

Crie um arquivo chamado get_tasks.phppara o end quebusca todas as tarefas:

<?php

require 'database.php';

try {
    $stmt = $conn->query('SELECT * FROM tasks');
    $tasks = $stmt->fetchAll(PDO::FETCH_ASSOC);
    header('Content-Type: application/json');
    echo json_encode($tasks);
} catch(PDOException $e) {
    echo json_encode(['error' => $e->getMessage()]);
}
Enter fullscreen mode Exit fullscreen mode

添加任务

Crie um arquivo chamado add_task.phppara o end que adiciona uma nova tarefa:

<?php

require 'database.php';

if (isset($_POST['title'])) {
    $title = $_POST['title'];

    try {
        $stmt = $conn->prepare('INSERT INTO tasks (title) VALUES (:title)');
        $stmt->bindParam(':title', $title);
        $stmt->execute();
        $taskId = $conn->lastInsertId();
        echo json_encode(['id' => $taskId, 'title' => $title, 'completed' => false]);
    } catch(PDOException $e) {
        echo json_encode(['error' => $e->getMessage()]);
    }
} else {
    echo json_encode(['error' => 'O título da tarefa é obrigatório']);
}
Enter fullscreen mode Exit fullscreen mode

完成任务

Crie um arquivo chamado complete_task.phppara o end que marca uma tarefa como concluída:

<?php

require 'database.php';

if (isset($_POST['id'])) {
    $taskId = $_POST['id'];

    try {
        $stmt = $conn->prepare('UPDATE tasks SET completed = 1 WHERE id = :id');
        $stmt->bindParam(':id', $taskId);
        $stmt->execute();
        echo json_encode(['success' => true]);
    } catch(PDOException $e) {
        echo json_encode(['error' => $e->getMessage()]);
    }
} else {
    echo json_encode(['error' => 'O ID da tarefa é obrigatório']);
}
Enter fullscreen mode Exit fullscreen mode

删除任务

Crie um arquivo chamado delete_task.phppara o end que deleta uma tarefa:

<?php

require 'database.php';

if (isset($_POST['id'])) {
    $taskId = $_POST['id'];

    try {
        $stmt = $conn->prepare('DELETE FROM tasks WHERE id = :id');
        $stmt->bindParam(':id', $taskId);
        $stmt->execute();
        echo json_encode(['success' => true]);
    } catch(PDOException $e) {
        echo json_encode(['error' => $e->getMessage()]);
    }
} else {
    echo json_encode(['error' => 'O ID da tarefa é obrigatório']);
}
Enter fullscreen mode Exit fullscreen mode

重要代码

Agora,vamos entend alguns trechos importantes dos códigos acima:

$stmt = $conn->query('SELECT * FROM tasks');
$tasks = $stmt->fetchAll(PDO::FETCH_ASSOC);
Enter fullscreen mode Exit fullscreen mode
  • O trecho acima executa uma Consulta SQL para selecionar todas as tarefas da tabela tasks
  • query('SELECT * FROM tasks')执行咨询并返回PDOStatement代表结果的对象。
  • fetchAll(PDO::FETCH_ASSOC)恢复今天作为联合体的结果,onde a chave é o nome da coluna。
if (isset($_POST['title'])) {
    $title = $_POST['title'];
    // ...
}
Enter fullscreen mode Exit fullscreen mode
  • title使用超级全局 POST 来验证环境参数$_POST
  • $_POST['title']在没有必要条件的情况下恢复或恢复参数title
  • 必须验证并确保该标题的重要性,才能确保插入的程序前的内容。
$stmt = $conn->prepare('INSERT INTO tasks (title) VALUES (:title)');
$stmt->bindParam(':title', $title);
$stmt->execute();
Enter fullscreen mode Exit fullscreen mode
  • 准备好 SQL 指令并插入表格中tasks
  • prepare('INSERT INTO tasks (title) VALUES (:title)')准备 SQL com um parâmetro nomeado 指令:title
  • bindParam(':title', $title)vincula o valor do parâmetro :titleà variável $title
  • execute()执行准备说明。

测试

测试一个 API,可以通过 HTTP 协议来配置 PHP(例如 Apache 的 XAMPP)或者 PHP 的本地执行程序,或者通过服务器来执行php -S localhost:8000PHPphp -S 0.0.0.0:8080操作接口(com a porta da sua escolha)。

Uma vez que a API esteja disponível em uma porta, você pode criar requests para os arquivos usando alguma ferramenta de testes de API (insomnia, postman, Thunder client).

Aqui vamos fazer testes usando o Thunder Client, ditamente do VSCode:

图片描述

图片描述


Criando API(方法 2 - 语义 HTTP)

PHP 的 API 格式可以使用不同的 HTTP 方法(POST、PUT、DELETE) - 或 HTTP 语义。没有任何例子,vamos 实现了一个 API em um único arquivo。

Para isso, crie um arquivo chamado api.phpe adicione o seguinte código:

<?php

require 'database.php';

// Rota para buscar todas as tarefas
if ($_SERVER['REQUEST_METHOD'] === 'GET' && empty($_GET)) {
    try {
        $stmt = $conn->query('SELECT * FROM tasks');
        $tasks = $stmt->fetchAll(PDO::FETCH_ASSOC);
        header('Content-Type: application/json');
        echo json_encode($tasks);
    } catch(PDOException $e) {
        echo json_encode(['error' => $e->getMessage()]);
    }
}

// Rota para adicionar uma nova tarefa
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $data = json_decode(file_get_contents('php://input'), true);

    if (empty($data['title'])) {
        echo json_encode(['error' => 'O título da tarefa é obrigatório']);
        exit;
    }

    $title = $data['title'];

    try {
        $stmt = $conn->prepare('INSERT INTO tasks (title) VALUES (:title)');
        $stmt->bindParam(':title', $title);
        $stmt->execute();
        $taskId = $conn->lastInsertId();
        echo json_encode(['id' => $taskId, 'title' => $title, 'completed' => false]);
    } catch(PDOException $e) {
        echo json_encode(['error' => $e->getMessage()]);
    }
}

// Rota para marcar uma tarefa como concluída
if ($_SERVER['REQUEST_METHOD'] === 'PUT') {
    $data = json_decode(file_get_contents('php://input'), true);

    if (empty($data['id'])) {
        echo json_encode(['error' => 'O ID da tarefa é obrigatório']);
        exit;
    }

    $taskId = $data['id'];

    try {
        $stmt = $conn->prepare('UPDATE tasks SET completed = 1 WHERE id = :id');
        $stmt->bindParam(':id', $taskId);
        $stmt->execute();
        echo json_encode(['success' => true]);
    } catch(PDOException $e) {
        echo json_encode(['error' => $e->getMessage()]);
    }
}

// Rota para deletar uma tarefa
if ($_SERVER['REQUEST_METHOD'] === 'DELETE') {
    $data = json_decode(file_get_contents('php://input'), true);

    if (empty($data['id'])) {
        echo json_encode(['error' => 'O ID da tarefa é obrigatório']);
        exit;
    }

    $taskId = $data['id'];

    try {
        $stmt = $conn->prepare('DELETE FROM tasks WHERE id = :id');
        $stmt->bindParam(':id', $taskId);
        $stmt->execute();
        echo json_encode(['success' => true]);
    } catch(PDOException $e) {
        echo json_encode(['error' => $e->getMessage()]);
    }
}
Enter fullscreen mode Exit fullscreen mode

A API possui quatro rotas:

GET: /api.php - retorna todas as tarefas
POST: /api.php - adiciona uma nova tarefa
PUT: /api.php - marca uma tarefa como concluída
DELETE: /api.php - deleta uma tarefa

重要代码

Além dos trechos de códigos que vimos na front, aqui temos um código importante:

$data = json_decode(file_get_contents('php://input'), true);
Enter fullscreen mode Exit fullscreen mode

这是 JSON 和与 PHP 关联的数组解码所必需的。必须将其作为塔雷法列表中的歌剧来实现。

测试

在睾丸前部的过程中,可以根据夏季使用的情况进行精确的配置。

接下来,使用 Thunder 客户端打印:

图片描述

图片描述


重要!

依赖于 API 实现,以一种共同的方式请求 vai mudar。没有primeiro caso,o request foi feito usando o body do request,enquanto no segundo os bados foramenvados via json

fetch这是使用JavaScript 和 os headers的 API所产生的影响。

文章来源:https://dev.to/ranierivalenca/api-basica-com-php-e-mysql-via-pdo-para-uma-todo-list-46da