javascript - 使用 javascript 函数进行 MySQL 查询。

标签 javascript php mysql ajax

我正在尝试创建我将能够在 javascript 代码中使用的 PHP 函数。

<!DOCTYPE html>
<?php
include 'pdo_connect.php';
function pleaseWork($query) {
    return dataQuery($query)->fetchAll();
}
function makeQuery($query)
{
    $work = pleaseWork($query);
    $json = json_encode($work);
}
?>
<html>

<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<title>Admin check</title>
<meta charset="UTF-8">
</head>

<body>
<script type='text/javascript'> 
<?php makeQuery("SELECT * FROM `grupy`");?>

var jArray = <?= $json ?>;
console.log(jArray);
</script>

当然这是行不通的,因为 JS block 中的代码对文件开头的变量一无所知。我怎么做?我从未使用过 AJAX 或任何东西,所以我不知道该怎么做。

最佳答案

您需要更详细地了解 OOP(面向对象编程)。也许搜索依赖注入(inject)或异常。此外,您需要创建一个 PHP 脚本来接受您的 ajax 请求并调用必要的函数或方法,这些函数或方法应该全部分离到它们自己的文件和类中。这会将不同的数据层彼此分开(即表示、业务逻辑、数据)。您还应该花一些时间学习 MVC( Model View Controller )是关于什么的。这将帮助您了解分离的重要性。

现在,我将向您展示一个快速解决您的问题的方法。假设您的文件结构都在同一个目录中:

|--- ajax_requests.php
|--- Database.php
|--- Functions.php
|--- index.php

index.php 是您的 HTML/jQuery 所在的位置:

<!DOCTYPE html>
<html>

<head>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
    <title>Admin check</title>
    <meta charset="UTF-8">
</head>
<body>
<script type='text/javascript'>
    $.ajax({
        type: "post",
        url: "ajax_requests.php",
        data: {request: "get_grupy_json"},
        success: function(result){
            console.log(result);
        }
    });
</script>

注意我们是如何使用 jQuery 发出 Ajax 请求的。我们正在向文件 ajax_requests.php 发送 post 请求,发送 get_grupy_json 作为我们的 request 参数。您的前端 View 中不应出现任何 SQL 查询。

ajax_requests.php 接收请求,获取数据库对象并将其发送到函数对象,然后检查请求是否作为函数类的方法存在,如果存在,则运行方法并将结果转为json(记得自己添加错误检查):

<?php
if (!empty($_POST)) {

    $method = $_POST['request'];

    include 'Database.php';
    include "Functions.php";

    $db = new Database();
    $functions = new Functions($db);

    if (method_exists($functions, $method)) {
        $data = $functions->$method();
        header('Content-Type: application/json');
        echo json_encode($data);
    }
}

Functions.php

class Functions
{
    private $db;

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

    public function get_grupy_json()
    {
        $query = "SELECT * FROM `grupy`";
        $result = $this->db->dataQuery($query);
        return $result->fetchAll();
    }
}

数据库.php

class Database
{
    private $conn = null;

    public function __construct()
    {
        try {
            $username = "root";
            $password = "root";
            $servername = "localhost";
            $dbname = "test";
            $this->conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);

            $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        } catch (PDOException $e) {
            trigger_error("Error: " . $e->getMessage());
        }
    }

    public function dataQuery($query, $params = array())
    {
        try {
            $stmt = $this->conn->prepare($query);
            $stmt->execute($params);
            return $stmt;

        } catch (PDOException $e) {
            trigger_error("Error: " . $e->getMessage());
        };
    }


}

这是我将要做的事情的粗略模型。我希望您了解它是如何分离的,以便您可以随着应用程序的增长轻松地向其添加功能。

关于javascript - 使用 javascript 函数进行 MySQL 查询。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35440184/

相关文章:

php - 使用自定义字段在 PHP 中添加换行符

php - 数据未插入数据库

mysql - Playframework 2.5 Slick + DI

python - Flask-mysqldb数据库游标

mysql - SQL 单元中的 SQL 查询

包含字符串的 JavaScript Switch 语句

javascript - onClick window.open PHP 中的两个链接不起作用

javascript - 是否可以在 Angular Controller 方法中对整个对象进行建模绑定(bind)?

c# - 在 MVC ASP.net 中使用 X-editable 时不要重复自己的最佳方法

php - laravel 8 auth 路由 [login] 未定义