使用 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 查询永远不应该放在表示层中。 不幸的是你的代码给出了这个错误:<b>Fatal error</b>: Class 'Database' not found in <b>ajax_requests.php</b> on line <b>9</b><br />
【参考方案2】:
AJAX 不能这样工作。基本上,PHP 的产品是一个 HTML 页面(带有 JS),在浏览器中根据请求呈现。当用户执行一个操作时,应该会显示由 AJAX 检索到的数据,浏览器会发出另一个请求,可能是对不同的 PHP 脚本。此请求的结果不会显示给用户,因为在执行第一个请求时,它会传递给当前显示页面的 JS 中的函数(这就是使其成为 AJAX 的原因)。然后,此函数可以按照它想要的任何方式处理数据。
看看这个:http://www.w3schools.com/jquery/jquery_ajax_intro.asp。
【讨论】:
以上是关于使用 javascript 函数进行 MySQL 查询。的主要内容,如果未能解决你的问题,请参考以下文章
如何将 JavaScript 日期转换为 MySQL 日期时间格式? [复制]
使用 JavaScript reduce 函数对数组进行排序