首页 > 数据库 > mysql教程 > CRUD PHP 和 MySQL 以及 API 和重要基础知识

CRUD PHP 和 MySQL 以及 API 和重要基础知识

Barbara Streisand
发布: 2024-12-31 13:23:10
原创
867 人浏览过

CRUD PHP e MySQL e API e Fundamentos importantes

如何使用 MySQL 在 PHP 中创建 CRUD(创建、读取、更新、删除)。

此示例使用MySQLi扩展来执行数据库操作。

第1步:创建数据库和表

运行以下 SQL 脚本来创建数据库和名为 users 的表:

CREATE DATABASE crud_example;
USE crud_example;

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) NOT NULL UNIQUE
);
登录后复制
登录后复制

第 2 步:连接数据库

创建config.php文件来管理数据库连接:

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "crud_example";

// Conexão com o banco
$conn = new mysqli($servername, $username, $password, $dbname);

// Verifica conexão
if ($conn->connect_error) {
    die("Falha na conexão: " . $conn->connect_error);
}
?>
登录后复制

第三步:主页

创建一个index.php文件来列出用户并添加创建、编辑和删除功能:

<?php
include 'config.php';

// Leitura dos dados
$sql = "SELECT * FROM users";
$result = $conn->query($sql);
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CRUD em PHP</title>
</head>
<body>
    <h1>Lista de Usuários</h1>
    <a href="create.php">Adicionar Novo Usuário</a>
    <table border="1">
        <tr>
            <th>ID</th>
            <th>Nome</th>
            <th>Email</th>
            <th>Ações</th>
        </tr>
        <?php while ($row = $result->fetch_assoc()) { ?>
            <tr>
                <td><?= $row['id'] ?></td>
                <td><?= $row['name'] ?></td>
                <td><?= $row['email'] ?></td>
                <td>
                    <a href="edit.php?id=<?= $row['id'] ?>">Editar</a>
                    <a href="delete.php?id=<?= $row['id'] ?>" onclick="return confirm('Tem certeza que deseja excluir?')">Excluir</a>
                </td>
            </tr>
        <?php } ?>
    </table>
</body>
</html>
登录后复制

第四步:创建用户

创建一个create.php文件来添加新用户:

<?php
include 'config.php';

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $name = $_POST['name'];
    $email = $_POST['email'];

    $sql = "INSERT INTO users (name, email) VALUES ('$name', '$email')";
    if ($conn->query($sql) === TRUE) {
        header("Location: index.php");
        exit;
    } else {
        echo "Erro: " . $conn->error;
    }
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Criar Usuário</title>
</head>
<body>
    <h1>Adicionar Novo Usuário</h1>
    <form method="POST">
        <label for="name">Nome:</label>
        <input type="text">




<hr>

<h3>
  
  
  Passo 5: Editar Usuário
</h3>

<p>Crie um arquivo edit.php para editar um usuário existente:<br>
</p>

<pre class="brush:php;toolbar:false"><?php
include 'config.php';

$id = $_GET['id'];
$sql = "SELECT * FROM users WHERE id = $id";
$result = $conn->query($sql);
$user = $result->fetch_assoc();

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $name = $_POST['name'];
    $email = $_POST['email'];

    $sql = "UPDATE users SET name='$name', email='$email' WHERE>




<hr>

<h3>
  
  
  Passo 6: Excluir Usuário
</h3>

<p>Crie um arquivo delete.php para excluir um usuário:<br>
</p>

<pre class="brush:php;toolbar:false"><?php
include 'config.php';

$id = $_GET['id'];
$sql = "DELETE FROM users WHERE>




<hr>

<h3>
  
  
  Como Rodar o Projeto
</h3>

<ol>
<li>Configure o servidor local (como XAMPP ou LAMP).</li>
<li>Coloque todos os arquivos em uma pasta dentro do diretório público (htdocs ou equivalente).</li>
<li>Acesse http://localhost/sua_pasta/index.php no navegador.</li>
</ol>

<p>Esse é um CRUD básico e pode ser melhorado com validações, segurança (como SQL Injection), e estruturação MVC.</p>


<hr>

<h2>
  
  
  CRUD usando PHP e MySQL, estruturado de forma <strong>orientada a objetos (OOP)</strong>
</h2>

<p>A abordagem inclui uma classe para gerenciar as operações do banco de dados e separação lógica.</p>


<hr>

<h3>
  
  
  Passo 1: Configuração da Conexão com o Banco
</h3>

<p>Crie um arquivo Database.php para encapsular a conexão com o banco:<br>
</p>

<pre class="brush:php;toolbar:false"><?php
class Database {
    private $host = "localhost";
    private $user = "root";
    private $pass = "";
    private $dbname = "crud_example";
    public $conn;

    public function __construct() {
        $this->conn = new mysqli($this->host, $this->user, $this->pass, $this->dbname);

        if ($this->conn->connect_error) {
            die("Erro na conexão: " . $this->conn->connect_error);
        }
    }
}
?>
登录后复制

第 2 步:银行运营课程

创建User.php文件来管理CRUD操作:

<?php
include 'Database.php';

class User {
    private $db;

    public function __construct() {
        $this->db = (new Database())->conn;
    }

    // Create
    public function create($name, $email) {
        $stmt = $this->db->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
        $stmt->bind_param("ss", $name, $email);
        return $stmt->execute();
    }

    // Read
    public function getAll() {
        $result = $this->db->query("SELECT * FROM users");
        return $result->fetch_all(MYSQLI_ASSOC);
    }

    public function getById($id) {
        $stmt = $this->db->prepare("SELECT * FROM users WHERE id = ?");
        $stmt->bind_param("i", $id);
        $stmt->execute();
        return $stmt->get_result()->fetch_assoc();
    }

    // Update
    public function update($id, $name, $email) {
        $stmt = $this->db->prepare("UPDATE users SET name = ?, email = ? WHERE id = ?");
        $stmt->bind_param("ssi", $name, $email, $id);
        return $stmt->execute();
    }

    // Delete
    public function delete($id) {
        $stmt = $this->db->prepare("DELETE FROM users WHERE id = ?");
        $stmt->bind_param("i", $id);
        return $stmt->execute();
    }
}
?>
登录后复制

第三步:主页

创建一个index.php文件来显示用户列表并管理导航:

<?php
include 'User.php';

$user = new User();
$users = $user->getAll();
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CRUD OOP PHP</title>
</head>
<body>
    <h1>Lista de Usuários</h1>
    <a href="create.php">Adicionar Novo Usuário</a>
    <table border="1">
        <tr>
            <th>ID</th>
            <th>Nome</th>
            <th>Email</th>
            <th>Ações</th>
        </tr>
        <?php foreach ($users as $u) { ?>
            <tr>
                <td><?= $u['id'] ?></td>
                <td><?= $u['name'] ?></td>
                <td><?= $u['email'] ?></td>
                <td>
                    <a href="edit.php?id=<?= $u['id'] ?>">Editar</a>
                    <a href="delete.php?id=<?= $u['id'] ?>" onclick="return confirm('Deseja excluir este usuário?')">Excluir</a>
                </td>
            </tr>
        <?php } ?>
    </table>
</body>
</html>
登录后复制

第四步:创建用户

创建一个create.php文件来添加新用户:

<?php
include 'User.php';

$user = new User();

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $name = $_POST['name'];
    $email = $_POST['email'];

    if ($user->create($name, $email)) {
        header("Location: index.php");
        exit;
    } else {
        echo "Erro ao criar usuário.";
    }
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Criar Usuário</title>
</head>
<body>
    <h1>Adicionar Novo Usuário</h1>
    <form method="POST">
        <label for="name">Nome:</label>
        <input type="text">




<hr>

<h3>
  
  
  Passo 5: Editar Usuário
</h3>

<p>Crie um arquivo edit.php para atualizar os dados do usuário:<br>
</p>

<pre class="brush:php;toolbar:false"><?php
include 'User.php';

$user = new User();
$id = $_GET['id'];
$data = $user->getById($id);

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $name = $_POST['name'];
    $email = $_POST['email'];

    if ($user->update($id, $name, $email)) {
        header("Location: index.php");
        exit;
    } else {
        echo "Erro ao atualizar usuário.";
    }
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Editar Usuário</title>
</head>
<body>
    <h1>Editar Usuário</h1>
    <form method="POST">
        <label for="name">Nome:</label>
        <input type="text">




<hr>

<h3>
  
  
  Passo 6: Excluir Usuário
</h3>

<p>Crie um arquivo delete.php para deletar um usuário:<br>
</p>

<pre class="brush:php;toolbar:false"><?php
include 'User.php';

$user = new User();
$id = $_GET['id'];

if ($user->delete($id)) {
    header("Location: index.php");
    exit;
} else {
    echo "Erro ao excluir usuário.";
}
?>
登录后复制

如何运行项目

  1. 设置本地服务器(如 XAMPP 或 LAMP)。
  2. 首先使用SQL创建数据库。
  3. 将所有文件放在公共目录中的一个文件夹中。
  4. 在浏览器中访问 http://localhost/your_pasta/index.php。

这个示例是面向对象的 CRUD 的基础,可以通过良好的实践进行改进,例如输入验证、更强大的错误处理和命名空间的使用。

以下是如何在 PHP 中创建两个 API 的示例:一个 后端 API 将被使用,另一个作为 客户端 来使用第一个 API。


创建要使用的 API(后端)

第1步:数据库结构

在数据库中创建用户表:

CREATE DATABASE api_example;
USE api_example;

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) NOT NULL UNIQUE
);
登录后复制

第2步:API后端

创建一个名为 api.php 的文件以使端点可用。

<?php
header("Content-Type: application/json");

include 'Database.php';

class UserAPI {
    private $db;

    public function __construct() {
        $this->db = (new Database())->conn;
    }

    public function handleRequest() {
        $method = $_SERVER['REQUEST_METHOD'];
        $endpoint = $_GET['endpoint'] ?? '';

        switch ($endpoint) {
            case 'users':
                if ($method === 'GET') {
                    $this->getUsers();
                } elseif ($method === 'POST') {
                    $this->createUser();
                } else {
                    $this->response(405, "Method Not Allowed");
                }
                break;

            default:
                $this->response(404, "Endpoint Not Found");
        }
    }

    private function getUsers() {
        $result = $this->db->query("SELECT * FROM users");
        $users = $result->fetch_all(MYSQLI_ASSOC);
        $this->response(200, $users);
    }

    private function createUser() {
        $input = json_decode(file_get_contents("php://input"), true);

        if (empty($input['name']) || empty($input['email'])) {
            $this->response(400, "Missing required fields: name or email");
            return;
        }

        $stmt = $this->db->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
        $stmt->bind_param("ss", $input['name'], $input['email']);

        if ($stmt->execute()) {
            $this->response(201, "User created successfully");
        } else {
            $this->response(500, "Internal Server Error");
        }
    }

    private function response($status, $data) {
        http_response_code($status);
        echo json_encode(["status" => $status, "data" => $data]);
    }
}

$api = new UserAPI();
$api->handleRequest();
?>
登录后复制

2. 创建客户端消费API

API客户端

创建一个名为 client.php 的文件来使用后端 API。

CREATE DATABASE crud_example;
USE crud_example;

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) NOT NULL UNIQUE
);
登录后复制
登录后复制

3. 测试API

第一步:配置本地环境

  1. 设置您的本地服务器(XAMPP、LAMP 或类似服务器)。
  2. 将 api.php 和 client.php 文件放在同一个公共文件夹中。

第 2 步:测试

  1. API 后端:前往 http://localhost/api.php?endpoint=users 检查 API 端点。
  2. 客户端:在终端或者通过浏览器运行client.php文件来测试消费。

这个例子是一个功能基础。对于生产,建议:

  • 使用身份验证令牌(如 JWT)。
  • 添加数据验证和清理
  • 改进错误管理和 HTTP 响应。

如果您正在准备 PHP 和 MySQL 初级开发人员的技术面试,以下是通常涵盖的主要主题,以及一些提示:


PHP 基础知识

  • 基本语法:有关变量、数组、字符串、循环、函数和控制结构的知识。
  • 内置函数:操作字符串(例如,explode、implode、trim)、数组(array_merge、array_filter)和数字(round、rand)。
  • 面向对象(OOP):类、对象、继承、封装、多态性和接口。
  • 处理文件:fopen、fwrite、file_get_contents。
  • 错误和异常处理:try-catch 以及如何处理 PHP 中的错误。
  • 超级全局:$_POST、$_GET、$_SESSION、$_COOKIE,以及如何使用它们。

2. MySQL 和 PHP 集成

  • 基本查询:SELECT、INSERT、UPDATE、DELETE,带或不带 WHERE、ORDER BY 和 LIMIT 等子句。
  • 连接:了解如何使用 INNER JOIN、LEFT JOIN、RIGHT JOIN。
  • 关系:使用相关表(1:1、1:N、N:N)。
  • 使用 PDO 或 MySQLi 进行 CRUD:使用准备好的查询执行查询和防止 SQL 注入的知识。
  • 索引:它们是什么以及它们如何帮助性能。
  • 事务:MySQL 中的概念和使用(开始事务、提交、回滚)。

3.数据结构和逻辑

  • 基本算法:排序(冒泡排序、快速排序)、搜索(二值、线性)。
  • 数据结构:数组、堆栈、队列、列表。
  • 故障排除:具有解决小逻辑问题的经验,例如技术挑战中发现的问题(例如 HackerRank、Codewars)。

4.良好实践和标准

  • 干净的代码:使用描述性变量和函数名称,缩进良好的代码。
  • DRY(不要重复自己)KISS(保持简单、愚蠢)
  • 基本安全:防止SQL注入、XSS和CSRF。

5.网页开发

  • 基本 HTML/CSS/JavaScript:有足够的知识来处理与前端交互的后端。
  • 表单:表单处理、服务器端验证。
  • RESTful API:如何创建和使用 API、HTTP 方法(GET、POST、PUT、DELETE)。
  • 会话和身份验证:使用 $_SESSION 和基本登录/注销管理。

6.工具和环境

  • 使用 Git 进行版本控制:提交、分支、合并以及如何创建拉取请求。
  • PHP Composer:了解如何使用外部依赖项。
  • 本地环境:使用 WAMP、XAMPP 或 Docker 的经验。
  • 调试:使用 var_dump、print_r 或 Xdebug 等工具。

7.软件工程的基本概念

  • 架构模型:MVC(模型-视图-控制器)。
  • 关系数据库:表、主键和外键的规范化。
  • 版本控制:使用 Git 存储库并了解团队工作流程(例如 Git Flow)。

8.行为问题

小型公司也会评估软技能。准备以下问题:

  • 你为什么选择 PHP?
  • 在压力下你如何解决问题?
  • 告诉我你已经开发的一个项目。
  • 如何处理错误?

脱颖而出的秘诀

  1. 在面试前设计一些实用的东西:例如,一个简单的 CRUD、一个 RESTful API 或一个基本的登录系统。这显示了你的主动性。
  2. 了解公司:了解它的业务、技术,看看您的答案是否能够满足您的需求。
  3. 说实话:不了解一切很正常。表现出学习的意愿以及如何解决知识差距。

以上是CRUD PHP 和 MySQL 以及 API 和重要基础知识的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板