JavaScript能够连接MySQL吗?

129

JavaScript可以连接MySQL吗?如果可以,怎么做?


1
不,除非你不是在谈论浏览器中的JavaScript。 - Luca Matteis
3
服务器端 JavaScript(例如通过 Rhino)怎么样?我们能连接到数据库吗? - Joand
10
Node.js 也可以正常工作。 - Gabriel Fair
4
忽略本页面上的所有答案,因为它们全部都是错误的。实际上,这是可以做到的。请参见https://developer.chrome.com/apps/app_network。 - Pacerier
1
被接受的答案是完全错误的(在2010年也是如此)。这个答案是正确的。 - T.J. Crowder
你可能问错了问题。JavaScript 是一种语言,它本身并不会“连接”任何东西。 - Caltor
16个回答

96

客户端JavaScript不能直接访问MySQL,需要某种桥梁。但是上面加粗的说法JavaScript只是一个客户端语言是不正确的 - JavaScript可以在客户端和服务器端运行,例如Node.js.

Node.js可以通过类似https://github.com/sidorares/node-mysql2的东西来访问MySQL。

您还可以使用Socket.IO开发一些内容。

您是否想询问客户端JS应用程序是否可以访问MySQL?我不确定是否存在此类库,但这是可能的。

编辑:自撰写以来,我们现在拥有MySQL Cluster

Node.js的MySQL Cluster JavaScript驱动程序正是其名称所示-它是一个连接器,可以直接从您的JavaScript代码中调用以读取和写入您的数据。由于它直接访问数据节点,因此没有通过MySQL Server传递的额外延迟,并且需要从JavaScript代码/对象转换为SQL操作。如果出于某种原因,您希望它通过MySQL Server(例如,如果您将表存储在InnoDB中),则可以进行配置。


58
如果您想使用JavaScript连接到MySQL数据库,可以使用Node.js和一个名为mysql的库。您可以创建查询,并将结果作为一组记录数组获取。如果您想尝试它,可以使用我的project generator创建后端并选择MySQL作为要连接的数据库。然后,只需将新的REST APIGraphQL端点暴露给前端,并开始使用您的MySQL数据库。

怀旧情感留下的旧回答

NOW

据我了解,如果我理解问题并且没有错误,它涉及仅在客户端使用JavaScript的经典服务器模型。在这种经典模型中,使用LAMP服务器(Linux,Apache,MySQL,PHP),与数据库接触的语言是PHP,因此要请求数据库数据,您需要编写PHP脚本并将返回的数据echo到客户端。基本上,根据物理机器分配语言如下:

  1. 服务器端:PHP和MySQL。
  2. 客户端:HTML/CSS和JavaScript。

这符合MVC模型(Model,View,Controller),其中我们具有以下功能:

  1. 模型:模型处理数据,在这种情况下,是管理变量或访问存储在MySQL数据库中的数据的PHP脚本,并将其作为JSON数据发送到客户端。
  2. 视图:视图是我们看到的内容,应完全独立于模型。它只需要显示模型中包含的数据,但不应在其中包含相关数据。在这种情况下,视图使用HTML和CSS。HTML用于创建视图的基本结构,而CSS用于赋予这个基本结构形状。
  3. 控制器:控制器是我们的模型和视图之间的接口。在这种情况下,使用的语言是JavaScript,并将模型发送给我们的数据作为JSON包,并将其放入提供HTML结构的容器中。控制器与模型交互的方式是使用AJAX。我们使用GETPOST方法调用服务器端的PHP脚本,并捕获从服务器返回的数据。
对于控制器,我们有非常有趣的工具,如jQuery,作为“低级”库来控制HTML结构(DOM),然后是新的、更高级别的Knockout.js,它允许我们创建观察者,连接不同的DOM元素,在事件发生时更新它们。此外,谷歌的Angular.js也类似地工作,但似乎是一个完整的环境。为了帮助您在它们之间进行选择,这里有两篇优秀的分析:Knockout vs. Angular.jsKnockout.js vs. Angular.js。我还在阅读中,希望它们能帮到你。 NOW 在基于Node.js的现代服务器中,我们使用JavaScript来完成所有操作。Node.js是一个JavaScript环境,带有许多与Google V8,Chrome JavaScript引擎一起工作的库。我们使用这些新服务器的方式是:
  1. Node.jsExpress构建服务器的主框架。我们可以用几行代码创建一个服务器,甚至可以使用像Express这样的库来更轻松地创建服务器。使用Node.js和Express,我们将管理客户端对服务器的请求,并用适当的页面来回应它们。
  2. Jade为了创建页面,我们使用一种模板语言,即Jade,它允许我们像编写HTML一样编写网页,但有所不同(需要一点时间,但易于学习)。然后,在服务器代码中回答客户端的请求时,我们只需要将Jade代码呈现为“真正”的HTML代码。
  3. Stylus类似于Jade,但用于CSS。在这种情况下,我们使用一个中间件函数将stylus文件转换为我们页面上的真实CSS文件。
然后我们有很多可以使用NPM(Node.js包管理器)安装的软件包,并直接在我们的Node.js服务器中使用它们,只需引用即可(对于那些想学习Node.js的人,请尝试这个初学者教程以获得概述)。在这些软件包中,你可以找到一些用于访问数据库的软件包。使用这些软件包,你可以使用服务器端的JavaScript来访问My SQL数据库。
但是,如果你要使用Node.js工作,最好使用基于JSON文件的新NoSQL数据库,如MongoDB。它不像MySQL一样存储表格,而是将数据存储在JSON结构中,因此你可以将不同的数据放入每个结构中,例如长数字向量,而不是为最大的表格大小创建巨大的表格。
我希望这个简短的解释对你有所帮助,如果你想了解更多信息,这里有一些资源可以供你使用:
  • Egghead: 这个网站充满了关于JavaScript及其环境的简短教程,非常值得一试。而且他们不时地提供折扣。
  • Code School: 提供一个免费且非常有趣的课程,讲解Chrome开发者工具,帮助你测试客户端。
  • Codecademy: 提供免费的HTML、CSS、JavaScript、jQuery和PHP课程,你可以通过在线示例跟随学习。
  • 10gen Education: 提供适用于不同语言的MongoDB教程,包罗万象。
  • W3Schools: 这个网站有关于所有这些的教程,并且你可以将其作为参考资料库,因为它有很多非常有用的简短代码示例。
  • Udacity: 一个提供各种主题免费视频课程的网站,其中有一些非常有趣的关于Web开发的课程,我的最爱是一个令人惊叹的使用JavaScript进行3D图形设计的WebGL课程。

我希望它能帮助你开始。

玩得开心!


很好的详细回答,解释了机制。 - Duane
谢谢 :) 我刚刚在答案末尾添加了一个更新来解决这个问题。你可以使用一个名为“mysql”的库与一个节点服务器,我已经添加了一个链接到我创建的API生成器,你可以用它来开始一个新的API项目。希望能帮到你。 - Timbergus
关于“then”:JavaScript 用于服务器端的历史可以追溯到1995年,当时它被包含在 Netscape Enterprise Server 中。Microsoft 随后不久也在其 IIS 服务器中加入了“JScript”。因此,在服务器端使用 JavaScript 并不是什么新鲜事。 - T.J. Crowder
我认为,如果这个答案最新的信息在顶部会更好,或者只需删除旧的过时信息。它也有点冗长,并且专注于特定的编程语言。简短的答案是JavaScript可以用于直接从Node.JS(或其他服务器端运行环境)连接到MySQL数据库,但由于浏览器安全性考虑,无法从浏览器中连接。 - Caltor

28

不,JavaScript 不能直接连接 MySQL。但你可以将 JS 与 PHP 混合使用来实现。

JavaScript 是一种客户端语言,而你的 MySQL 数据库将在服务器上运行。


95
JavaScript运行在客户端并不意味着它不能连接到数据库服务器。未来版本的语言可能会添加API来访问远程数据库,尽管这种可能性很小。请注意:这并不影响JavaScript在客户端运行的事实。 - Lucas Pottersky
4
我不会称之为“将JS与PHP混合”,你可能会让PHP代码提前从MySQL检索出JavaScript代码/数据(例如json),或者在服务器上使用PHP提供http(json/REST/SOAP/...等)接口来访问PHP代码从MySQL中检索的数据 - 这个http接口可以被任何地方运行的JavaScript代码调用,主要是浏览器。今天来看,也不能再说JavaScript是客户端了 - 例如请查看Node.js。 - Henning
15
“JavaScript 是一种客户端语言。” 不完全正确:它并不比 Java 更具代表性。 - Lee Goddard
2
在新版本的MySQL 5.7中,httpclient可以使用专为MySQL 5.7构建的http插件直接与MySQL数据库通信。 - Atul Chaudhary
让所有浏览器都本地拥有直接访问您的MySQL服务器的JavaScript文件,这难道不会成为一种安全风险吗? - Vassilis
1
为什么要局限于PHP呢?任何服务器端语言都可以,包括在Node.js运行时执行的JavaScript。 - Caltor

11

有点晚了,但最近我发现 MySql 5.7 通过 http 插件让用户可以直接连接到 mysql。

寻找 Mysql 5.7 的 Http 客户端。


8

我认为你需要加入类似PHP这样的东西来完成这个方程式。PHP与数据库交互,然后你可以使用Javascript进行AJAX调用。


8

简单的答案是:不行。

JavaScript 是一种在浏览器中运行的客户端语言(除 node.js 外),而 MySQL 是一种在服务器上运行的服务器端技术。

这意味着你通常需要使用像 ASP.NET 或 PHP 这样的服务器端语言来连接数据库。


1
JavaScript(以客户端、浏览器形式存在)每天都用于与运行在服务器上的服务器端技术(Apache、Nginx、PHP、NodeJS等)进行连接。服务器/客户端的定义要求它们之间的“分隔”可以被克服。 - jeteon

7

你好?看一下Meteor。链接如下:

http://meteor.com/screencasthttp://net.tutsplus.com/tutorials/javascript-ajax/whats-this-meteor-thing/

我不明白它是如何实现的。但Nettuts+将此内容放在了javascript-ajax部分,也许魔法发生了。

它还展示了一些使用JS连接和插入到MongoDB的方法,像这样:

Products.insert({Name : "Hammer", Price : 4.50, InStock : true});
Products.insert({Name : "Wrench", Price : 2.70, InStock : true});
Products.insert({Name : "Screw Driver", Price : 3.00, InStock : false});
Products.insert({Name : "Drill", Price : 5.25, InStock : true});

1
您可以通过提供一个服务器端数据库驱动程序和/或实现替代API的客户端缓存来替换MongoDB的另一个数据库。mongo-livedata是这样一个项目的良好起点。 - Lee Goddard
Meteor是使用Node.js编写的,所以恐怕这个答案并没有添加任何新内容或改变什么。你只是拥有一个覆盖客户端和服务器的框架。 - Caltor

6
是的,MySQL有一个HTTP插件。
您可以参考这篇博客文章了解更多相关信息。
目前已经可以使用AJAX访问MySQL数据库,不过可能还没有达到生产环境的要求。

5

根据您的环境,您可以使用Rhino来完成这项任务,请参见Rhino网站。这将使您能够在JavaScript内部访问所有Java库。


2

JavaScript无法直接连接到数据库以获取所需数据,但可以使用AJAX。为了轻松地向服务器发送AJAX请求,您可以使用jQuery JS框架http://jquery.com。以下是一个小例子

JS:

jQuery.ajax({
type: "GET",
dataType: "json",
url: '/ajax/usergroups/filters.php',
data: "controller=" + controller + "&view=" + view,
success: function(json)
{
    alert(json.first);
    alert(json.second);
});

PHP:

$out = array(); 

// mysql connection and select query
$conn = new mysqli($servername, $username, $password, $dbname);


try {
  die("Connection failed: " . $conn->connect_error);

  $sql = "SELECT * FROM [table_name] WHERE condition = [conditions]";
  $result = $conn->query($sql);

if ($result->num_rows > 0) {
  // output data of each row
  while($row = $result->fetch_assoc()) {
    $out[] = [
       'field1' => $row["field1"],
       'field2' => $row["field2"]
    ];
  }
} else {
  echo "0 results";
}

} catch(Exception $e) {
  echo "Error: " . $e->getMessage();
}
    echo json_encode($out);

1
这个例子中的MySQL查询在哪里? - Michael
@Michael:非常好的问题。 - Connor Gurney

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接