使用javascript函数进行MySQL查询。

时间:2016-02-16 18:20:40

标签: 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块中的代码对文件开头的变量一无所知。我怎么做?我从未使用过AJAX或其他任何东西,所以我不知道该怎么做。

2 个答案:

答案 0 :(得分:3)

您需要更详细地了解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请求。我们正在向文件post发送ajax_requests.php个请求,将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);
    }
}

<强>的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();
    }
}

<强> database.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());
        };
    }


}

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

答案 1 :(得分:0)

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

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