使用 javascript 函数进行 MySQL 查询。

Posted

技术标签:

【中文标题】使用 javascript 函数进行 MySQL 查询。【英文标题】:Making MySQL queries using javascript function. 【发布时间】:2016-02-16 18:20:39 【问题描述】:

我正在尝试创建可以在 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 块中的代码从文件开头对变量一无所知。我怎么做?我从未使用过 AJAX 或任何东西,所以我不知道该怎么做。

【问题讨论】:

我认为您正在混合服务器端和客户端代码。您不希望在客户端代码中有任何查询或连接信息(就像您在这里一样)。如果您想通过 Javascript 获取数据,那么是的,您是对的,您应该对 Web 服务使用某种 AJAX 调用。然后,该 Web 服务将容纳您的数据库调用。我绝对建议对 AJAX 和 Web 服务进行一些研究。 我来到这里是为了在 ajax-call 中寻找类似 ajax-call 的东西,这让我找到了这个问题 ***.com/a/10089580/10470002。以防万一将来有人来这里看看是否可以做到。 【参考方案1】:

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

现在,我将向您展示解决问题的快速方法。让我们想象一下你的文件结构都在同一个目录中:

|--- 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 参数。您的前端视图中不应出现任何 SQL 查询。

ajax_requests.php 接收请求,获取 Database 对象并将其发送到 Functions 对象,然后检查请求是否作为 Functions 类的方法存在,如果存在,则运行方法并将结果转换为 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);
    

函数.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());
        ;
    



这是我将要做什么的粗略模型。我希望您了解它们是如何分离的,以便您可以在应用程序增长时轻松地为其添加功能。

【讨论】:

如果我想让查询来自参数的函数我应该做 ` public function get_grupy_json($query) $result = $this->db->dataQuery($query);返回 $result->fetchAll(); ` 但是我在哪里调用 get_grupy_json($query)? 您在 JSON 请求中进行了这些调用,但没有通过查询。不建议这样做,因为您的应用程序将对 SQL 注入开放。在 PHP 函数中静态构建所需的查询,然后通过 AJAX 调用这些函数。 所以如果我想进行例如 5 个不同的查询,那么我必须编写 5 个函数吗?在文件functions.php中 是的。 SQL 查询永远不应该放在表示层中。 不幸的是你的代码给出了这个错误:&lt;b&gt;Fatal error&lt;/b&gt;: Class 'Database' not found in &lt;b&gt;ajax_requests.php&lt;/b&gt; on line &lt;b&gt;9&lt;/b&gt;&lt;br /&gt;【参考方案2】:

AJAX 不能这样工作。基本上,PHP 的产品是一个 HTML 页面(带有 JS),在浏览器中根据请求呈现。当用户执行一个操作时,应该会显示由 AJAX 检索到的数据,浏览器会发出另一个请求,可能是对不同的 PHP 脚本。此请求的结果不会显示给用户,因为在执行第一个请求时,它会传递给当前显示页面的 JS 中的函数(这就是使其成为 AJAX 的原因)。然后,此函数可以按照它想要的任何方式处理数据。

看看这个:http://www.w3schools.com/jquery/jquery_ajax_intro.asp。

【讨论】:

以上是关于使用 javascript 函数进行 MySQL 查询。的主要内容,如果未能解决你的问题,请参考以下文章

使用 Javascript 预防 WebSQL 注入

如何将 JavaScript 日期转换为 MySQL 日期时间格式? [复制]

使用 JavaScript reduce 函数对数组进行排序

如何使用 reduce 函数 javascript 对对象进行分组

从 javascript/AJAX 调用 MySQL 查询

通过记录函数调用和参数进行实时javascript调试[重复]